CodeOnWeb
Hanyang ERICA
Log in

클래스와 객체

Baik Jeanseong 2018/09/14, 17:08

CSE2016 프로그램 설계 방법론

학습목표

  1. 표준 클래스 라이브러리를 이용하는 방법
  2. 클래스를 정의하고 객체를 생성하는 방법
  3. 객체들을 구별하기 위해 참조변수를 사용하는 방법

클래스와 객체

  • 절차지향 프로그래밍(Procedural-oriented Programming): C 언어
  • 객체지향 프로그래밍(Object-oriented Programming): JAVA

객체를 사용함으로써 사람, 사물, 그리고 무형의 사물의 복잡한 속성을 표현할 수 있어 실 세계의 문제를 보다 쉽게 프로그래밍할 수 있다.

객체의 생성

객체를 서로 구별하기 위해 참조형 변수를 사용한다. 집의 설계도에 따라 여러 채의 집을 지을 수 있는데, 그 때 똑같이 생긴 여러 개의 집을 서로 구별하기 위해 '서울 집', '대구 집' 과 '광주 집'이라는 이름을 사용하며 이 이름들이 참조변수에 해당한다. JAVA에서는 참조형 변수에 객체의 주소 값을 저장한다. 참조형 변수들의 선언문은 기본형 변수들의 선언문과 비슷한 구조를 가진다.

보충 설명

String은 java.lang에 포함되어 있는 클래스로써 참조형 변수의 한 예이다.

위 선언문은 String 객체를 가리키는 주소를 저장하는 변수 name 을 가진다. 다음 그림에서 보여주듯이 그 변수는 초기화되지 않아 null 값을 가진다. 자바에서 null은 '어떤 객체도 가리키지 않는다'는 것을 의미하는 예약어이다.

참조형 변수의 경우에는 사용하기 전에 유효한 객체를 가리키고 있는지를 확인해야 한다. 우리가 참조변수를 초기화하지 않고 사용하려고 하면 NullPointerException이라는 실행 오류가 발생한다. 위에서 String 형 참조변수인 name을 선언했지만 아직까지 실제로 어떤 String 객체도 존재하지 않고 name은 어떤 String 객체도 가리키지 않는다. 객체를 생성하는 것을 실례만들기(instantiation)라고 부른다. 한 객체는 특정 클래스의 한 실례(instance)이다. 객체를 생성하기 위해서 우리는 new 연산자를 사용한다. 이 연산자는 새로 생성되는 객체의 주소를 반환한다. 다음 배정문은 위에서 선언한 변수 name에 생성된 String 객체의 주소값을 준다.

new 연산자가 객체를 생성한 후에 생성자 메소드가 그 객체의 변수(들) 값을 초기화하기 위해 호출된다. 생성자 메소드는 클래스와 같은 이름을 가지는 특별한 메소드이다. 위 배정문이 실행된 후에 변수 name은 다음과 같이 '홍길동'이라는 문자열 객체를 가리킨다.

name "홍길동"

참조변수는 객체의 주소를 저장하기 때문에 객체가 저장되어 있는 메모리 위치에 대한 포인터(pointer)로 여겨질 수 있다. 주소값은 숫자로 보여질 수 있으나, 실제로는 실행될 때마다 주소 값이 달라지기 때문에 부적절하다. 참조변수는 객체를 가리킨다는 사실이 아는 것이 중요하다.

객체의 이용

  • 프로그램을 작성하기 위해 클래스들과 이 클래스들로부터 객체들을 만들어 사용
  • 클래스 혹은 객체에 명령하기 위해서 메시지를 보내야 함
  • 메소드: 클래스나 객체가 특정 일을 수행하는 명령문들의 나열

메소드의 예) 은행계좌

예금주, 계좌번호와 잔고를 조회하거나 변경하는 등의 작업들을 수행하는 메소드들이 정의되어 있다. 입금, 출금이나 잔고 조회를 수행하는 메소드는 잔고 데이터와 관련이 있다. 그리고 나서 특정 은행 계좌에 주어진 금액을 입금하기 위해서 우리는 은행 계좌 클래스로부터 한 객체를 만들고 그 객체에 주어진 금액을 입금하는 일을 처리하는 메시지를 보내기 위해 입금 메소드를 주어진 금액과 함께 호출한다. 그러면 해당 객체의 입금 메소드가 수행되어 입금 관련 일이 처리된다.

객체: 은행계좌
메소드: 입금, 출금, 잔고조회

메소드는 객체 메소드와 클래스 메소드로 나뉜다.

객체 메소드(instance method)

<객체를 가리키는 참조 변수명>.<객체 메소드명>(실제 매개변수 목록)

예를 들면 아래 코드의 name 변수가 가리키는 String 객체의 문자열 길이를 알기 위해서 String 클래스 내의 정의된 length 메소드를 다음과 같이 호출할 수 있다.

length 메소드는 매개 변수가 없다. length 메소드는 한 문자열 내에 있는 문자들의 수를 계산하여 반환한다. 위 코드에서 count에 반환 값인 3이 저장된다.

클래스 메소드(class method)

클래스 메소드는 클래스에 속하는 메소드이다. 클래스 메소드는 클래스에서 생성된 모든 객체들에 관한 정보를 관리하기 위해 유용하게 사용된다. 이 메소드는 클래스의 객체를 통해 호출되지 않고 클래스를 통해 호출된다.

<클래스명>.<클래스 메소드명>(실제 매개변수 목록)

예를 들면 자바에서 미리 정의된 Math 클래스는 많은 표준 수학적 메소드들을 제공한다. 이 메소드들은 모두 클래스 메소드이다. 따라서 이 메소드들을 호출하기 위해서 Math 클래스의 객체를 필요로 하지 않는다. 4의 제곱근을 구하기 위해서 Math 클래스의 sqrt 메소드를 다음과 같이 호출한다.

표준 클래스 라이브러리의 클래스가 제공하는 서비스를 사용하기 위해서 우리는 객체를 생성하거나 클래스 자체를 이용한다. 즉 객체를 생성하여 원하는 서비스를 제공하는 메소드를 호출할 수 있다. 혹은 클래스 자체에 속하는 클래스 메소드를 호출하는 경우에는 객체를 생성할 필요가 없다. 기존 클래스를 사용하는 예로 다음 절들에서 String, Random,과 Math 클래스를 다룬다.

표준 클래스 라이브러리

클래스 라이브러리는 프로그램을 개발할 때 사용할 수 있는 클래스들의 모음이다. 자주 사용되는 System, Scanner, String는 클래스 라이브러리의 일부이다. 각 클래스는 특정 패키지의 일부이다. System클래스는 java.lang 패키지 내에 있고 Scanner는 java.util 패키지 내에 있다.

표준 클래스 라이브러리의 주요 패키지들

패키지명목적
java.lang일반적인 지원
java.applet웹을 위한 애플릿의 작성
java.awt그래픽스와 그래픽 사용자 인터페이스 지원
java.swing추가적인 그래픽 사용자 인터페이스 지원
java.net네트워크 통신 지원
java.util일반적인 유틸리티
java.io다양한 입출력 지원
java.security보안 제약 사항들 강제 실행

import 선언

우리는 자바 프로그램을 작성할 때 가능한 경우마다 기존 클래스들을 사용하고 적절한 기존 클래스들이 없을 때 새 클래스들을 작성한다. 자바에서 관련이 있는 클래스들은 패키지(package)로 그룹화 할 수 있다. 자바 표준 클래스 라이브러리는 수 많은 패키지들로 구성되어 있다. 또한 우리가 새로 작성한 클래스들도 논리적으로 패키지로 묶을 수 있다. 그러면 그 클래스들은 다른 프로그램들에 의해 편리하게 재사용될 수 있다.

우리는 프로그램에서 한 패키지 내에 있는 한 클래스를 사용하기 위해서 그 클래스를 다음과 같이 언급한다.

<패키지 이름>.<클래스 이름>

예를 들면 한 프로그램에서 bankmanager라는 패키지 내에 있는 Account 클래스를 사용하기 위해서 Account 클래스를 다음과 같이 언급한다.

패키지들은 계층을 형성할 수 있다. 즉, 한 패키지는 부패키지들(subpackages)을 포함할 수 있다. 여러 계층으로 중첩된 패키지 내의 한 클래스를 나타내기 위해 우리는 여러 개의 마침표들을 사용한다. 예를 들면 java.util 패키지에 있는 Scanner 클래스를 나타내기 위해 우리는 다음과 같이 쓴다.

여기서 util 패키지는 java 패키지 안에 있다. 한 클래스가 속한 모든 패키지들의 이름들을 포함한 표기는 그 클래스의 완전 이름(fully qualified name)이라고 부른다. 완전 이름을 프로그램에서 사용하는 것은 자주 매우 변거로울 수 있다. 패커지 내의 한 클래스가 프로그램에서 여러 번 언급될 때 특히 그렇다. 이 문제를 피하기 위해서 우리는 import 문을 사용한다.

자바 프로그램을 작성할 때 java.lang 패키지의 클래스들은 필요하면 자동적으로 사용할 수 있다. 그러나 다른 패키지에 있는 클래스들을 사용하기 위해서 완전한 클래스 이름을 쓰거나 import 선언문을 사용해야 한다. 예를 들면 프로그램에서 Scanner 클래스를 사용하고 싶을 때 그 클래스의 완전한 이름인 java.util.Scanner를 사용할 수 있다. 혹은 프로그램의 맨 앞에 다음과 같은 import 선언문을 작성할 수 있다.

그러면 프로그램에서 Scanner 클래스가 필요할 때마다 java.util.Scanner 대신 Scanner라는 클래스 이름만을 사용할 수 있다.
한 특정 패키지 안에 있는 모든 클래스들을 사용하기 위해서 와일드 카드 문자인 *을 사용한다. 예를 들면 java.util 패커지 안에 있는 모든 클래스들을 사용하기 위해서는 다음과 같이 import 선언문을 작성할 수 있다.

java.lang 패커지의 모든 클래스들은 모든 프로그램에서 import 문 없이 사용 가능하다. 이는 모든 프로그램이 다음과 같은 import 선언문을 포함하고 있는 것과 같다.

String 클래스

자바는 문자열을 지원하기 위해 String 클래스를 제공한다. 문자열은 문자를 나열한 것이 다 즉 h, e, ㅣ, ㅣ, o 각각은 하나의 문자이지만,이것을 나열한 hello는 하나의 문자열이 된다. 그러면, 왜 문자열을 사용할까? 문자열을 사용하는 이유는 어떠한 단어나 문장을 표현하기 위해 문자 하나만 사용하는 것이 아니라 hello 처럼 문자들이 모인 형태를 사용하기 때문이다. 이제부터 이 문자열을 표현하고 사용하는 방법에 대하여 알아보자 String 클래스는 문 자열을 쉽게 나타낼 수 있게 하고, 문자열에 관한 여러 가지 유용한 메소드들을 제공한다. 자바에서 모든 문자열은 String 클래스의 객제이다. 자바는 문자열이 자주 사용되기 때문에 사용 편의를 위해 추가적 지원을 한다. 때때로 문자열 객체 내의 특정 문자를 언급하는것이 필요할 수 있다. 이것은 그 문자의 지수(index)를 멍시함으로써 이루어질 수 있다. 지수는 문자열 내의 위치이다. 각 문자열의 지수는 0부터 시작한다. 문자열 “ Hello"에서 H는 지수가 0이고 o는 지수가 4이다.

문자열 생성

문자열 변수의 선언문은 기본형 변수의 선언문과 거의 같다. 다음 변수 선언문을 고려하라.

위 선언문에서 String 형 참조변수인 welcome을 선언하지만 아직까지 실제로 어떤 String 객체도 존재히-지 않고 welcome은 어떤 String 객체도 가리키지 않는다 String 객체를 생성하는 것은 다른 객체들과는 다르다. 자바는 큰따옴표 안에 있는 문자열을 만날 때 자동적으로 문자열 객체 를 만든다. 예를 들면,

위 배정문은 ‘환영합니다’라는 값을 갖는 문자열 객체를 만들고 welcome이 생성된 문자열 객체를 가리커게 한다. 위의 두 문들은 다음과 같이 한 문으로 합칠 수 있다.

이는 자바가 표준 객체들을 다루는 방법과 다르다. 표준 객체에서는 new라는 연산자를 사용하고 생성자 메소드를 호출하여 객체를 생성한다. 물론 다음과 같이 표준 객제와 같은 방법을 사용하여 위와 같은 일을 수행할 수 있다.

welcome과 같은 문자열 변수에 값이 주어지면 그 값을 다음과 같이 화변에 보여 줄 수 있다.

위 출력문은 화면에 ‘환영합니다’를 보여준다.

문자열의 길이에는 제한이 없다. 문자열은 문자를 하나도 포함하지 않을 수 있다. 그러한 문자열은 빈 문자열이라고 부르고 “”이라고 쓴다. 문자열 “ ”온 빈 문자열이 아님에 유념하라. 그 문자열은 한 개의 빈 칸 문자를 포함한다. 문자열 객체가 생성 되면 그 객체의 값이나 길이는 바꿀 수 없다.

문자열 결합

자바에서는 분자열의 결합(concatenation)을 위해 연산자 ψ를 사용한다. 十연산자는 피연산자가 숫자일 때는 숫자들의 합을 구하지만 피연산자가 문자열들일 때는 문자열들을 결합시킨다. 다음 코드는 “자바”와 “프로그래머 ” 문자열을 결합하여 새로운 문자열을 생성하고 새로 생성된 문자열은 “자바프로그래머 ”가 된다.

그런데 여기서 문자열끼리 + 연산자를 사용하지 않고 문자열과 숫자에 + 연산자를 사용하는 경우는 어떻게 될까?
예를 들변 “평창" + 2018 과 같이 하면 숫자 2018이 문자열로 변환되고,문자열 결합이 이루어져 결과가 “평창2018"이 된다.

문자열 관련 메소드들

자바의 String 클래스가 제공하는 여러 메소드들 중 대표적인 메소드들은 다음과 같다.

  • length(): 문자열의 크기(문자열 내에 있는 문자들의 수)를 반환한다.
  • charAt(int index): 문자열 내에 (index 十U 번째 위치에 있는 문자를 반환한다. 첫번째 문자의 지수는 0이다.
  • substring(int Startindex): 문자열 내에 (Startindex + 1) 번째 위치에 있는 문자부터 끝 문자까지의 부분 문자열(substring)을 반환한다.
  • substring(int Startindex, int Endindex): 문자열 내에 (Startindex + 1) 번째 위치에 있는 문자부터 Endindex 번째 위치에 있는 문자까지의 부분 문자열을 반환한다.
  • indexOf(String aString): 문자열 내에 aString아라는 문자열이 나오는 첫 번째 지수를 반환한다.

substring 메 소드는 원 문자열 객체의 수정한 값인 새로운 문자열 객체를 반환한다. 다음의 코드는 이러 한 메소드들을 사용한 경우이다.

문자열 처리를 하는 간단한 프로그램이 다음 프로그램에 보여진다. 이 프로그램은 "자바프로그래밍은 어렵다!"라는 문자열을 "자바 프로그래밍은 쉽다!"라는 문자열로 바꾼다.

Random 클래스

프로그램을 작성할 때 난수(random number)가 펼요한 경우가 많다. 게임 프로그램에서 주사위 던지기나 카드 섞기 등을 나타내기 위해 자주 난수를 사용한다. 비행 시율레이터는 엔진 고장 횟수 등을 임의로 만들어 내기 위 해 난수를 사용할 수 있다. 문제 은행식 시험에서 다음 문제를 선택하기 위 해서 난수를 사용할 수 있다. Random 클래스는 의사 난수(pseudorandom number) 생성기를 나타낸다. 의사 난수는 정확하게 난수가 아니지만 거의 난수에 가깝다. 이 클래스는 java.util 패키지의 일부로서 의사 난수들을 생성하는 메소드들을 제공한다. 의사 난수 생성기는 초기 값에 기초하여 일련의 복잡한 계산을 수행한 후 난수처럼 보이는 수를 만들어 낸다. Ramdom 클래스의 주요 메소드들은 다음과 같다.

  • nextIntO: 모든 가능한 정수 값 범위에 있는 난수를 생성한다.
  • nextlnt(int num): 0과 num -1 사이 에 있는 난수를 생성한다.
  • next FloatO: 0.0과 1. 0(포함 안함) 사이에 있는 난수를 생성한다.

주사위 던지기를 모의 실험하기 위해 l부터 6 사이에 있는 난수들을 원한다고 하자. 그러한 난수를 만들기 위해 Random 클래스를 사용한다면 프로그램 내에 그 클래스를 간편하게 사용할 수 있게 해야 한다. 이를 위한 import 문은 다음과 같다.

난수를 만들기 위해 먼저 Random 객체를 생성해야 한다. 이를 위한 문은 다음과 같다.

다음으로 1과 6 사이의 난수를 만들기 위해서 먼저 nextlnt(6)를 호출하면 0과 5 사이의 난수가 만들어 진다. 그 난수에 1을 더하면 우리가 원하는 값을 얻는다. 생성된 난수를 저장하는 변수를 randomnumb er1라고 하자 그러면 다음 문이 1과 6 사이의 난수를 만들어 randomnumb er1에 저장한다.

다음으로 1과 6 사이의 난수를 다른 방법 을 이 용하여 만들 수 있다. 먼저 nextFloatO를 호출히면 0.0과 0. 999999 사이의 난수가 만들어 진다. 그 난수에 6을 곱한 값의 소수점이히-를 버린 후 1을 더하면 우라가 원하는 값을 얻는다. 다음 코드가 아 방법 을 이용하여 1과 6 사이의 난수를 만든다.

2개의 난수를 만드는 완전한 프로그램은 다음과 같다.

Math 클래스

Math 클래스는 수식 계산을 하는데 도움을 주는 많은 기본적인 수학 함수들을 제공한다. 그 클래 스는 java.lang 패키지의 일부이다. Math 클래스의 주요 메소드틀은 다음과 같다.

  • abs(int num): num의 절대값을 계산한다.
  • sin(double angle): angle의 sin 값을 계산한다.
  • sqrt(double num): num의 제곱근 값을 계산한다.
  • pow(double num, double po씨er): num의 power 승을 계산한다.

Math 클래스 내에 있는 모든 메소드들은 클래스 메소드이다. 따라서 그 메소드들을 호출하기 위해서 Math 클래스의 객체가 필요하지 않다. 클래스 이름을 이용하여 메 소드를 호출할수있다.직 각 삼각형의 두변의 길이가 주어 지 면 빗변의 길이를 계산하는 프로그램을 작성해 보자. 두 변의 길이를 a와 b라고 하고 빗변의 길이를 c라고 하자 그러면 c는 다음과 같이 계산할 수 있다.

$$x = \sqrt{a^2+b^2}.$$

위 식을 나타내는 자바 문은 Math 클래스를 이용하여 다음과 같이 작성할 수 있다.

두 변의 길이를 키보드를 통해 입력으로 받아 빗변의 길이를 계산하여 출력하는 프로그램은 다음과 같다.

예제 프로그램 작성

대학교의 신입생에게 임의의 학번을 부여하는 프로그램을 작성해 보자. 신입생으로부터 이름과 생년월일을 입력받은 후 임의의 학번을 생성해야 한다. 생년월일은 yyyy/mm/dd의 형태로 입력해야 한다. yyyy는 연도를 나타낸다. mm은 월을 나타내고 1월부터 9월까지는 한 자리 숫자이고 10월부터 12월까지는 두 자리 숫자이다. dd는 일을 나타내고 1일부터 9 일까지는 한 자리 숫자이고 10 일부터 31일까지는 두 자리 숫자이다. 학번은 18로 시작하고 18XXXX의 형태를 취한다. 학번의 XXXX는 1000부터 1009까지의 정수여야 한다. 프로그램 표본 실행의 한 예는 다음과 같다.

위 실행 예에서 이탤릭체로 쓰여진 부분은 프로그램 사용자가 키보드로 입력하는 값이다. 프로그램의 첫 번째 과정을 수행해 보자 먼저 이름과 생년월일을 나타내는 변수 이름을 정해야 한다. 그 이름을 각각 name과 birthdate라고 하자. 그 변수들은 문자열을 다루어야 하므로 데이터 형은 String이다. 따라서 변수 name과 birthdate의 선언문은 다음과 같다.

다음으로 입력받은 생년월일에서 연도 월과 일을 끄집어내어 저장해야 한다. 이를 위한 변수 이름을 각각 year, month, day라고 하자 이 변수들이 나타내는 값은 숫자이지만 문자열로 다루는 게 편하므로 데이터 형은 String으로 한다. 다음으로 학번은 18로 시작하는 6자리 숫자이지만 마지막 4자리 숫자가 임의로 생성되어야 한다. 생성되는 숫자를 저장하는 변수를 number로 하자. 그러면 number의 데이터 형은 int로 한다. 다음으로 입력 받은 생년월일에서 연도, 월과일을 끄집어내기 위해서는 생년월일 내에서 8’의 위치(지수)를 알아야 한다. 이를 위한 변수를 index라고 하자. 마지막으로 입력 받은 생년월일에서 연도와 8’를 제외하고 남은 문자열을 위한 변수가 펼요하다. 이 변수를 rest라고 하자.

이 문제를 해결하는 알고리즘은 다음과 같다.

  1. 이름을 입력 받는다.
  2. 생년월일을 압력 받는다.
  3. 생년월일에서 Y’가 나오는 첫 번째 지수를 찾는다.
  4. 생년월일에서 연도를 끄집어 낸다
  5. 생년월일에서 연도와 Y’를 삭제한 후 남은 문자열을 rest가 가리카게 한다.
  6. 남은 문자열에서 Y’가 나오는 첫 번째 지수를 찾는다.
  7. 남은 문자열에서 월을 끄집어 낸다.
  8. 남은 문자열에서 일을 끄집어 낸다.
  9. 1000부터 1009까지 임의의 변호를 생성한다.
  10. 18로 시작하는 6자리 학번을 만든다.
  11. 이름을 출력한다.
  12. 생년월일을 출력한다.
  13. 학변을출력한다

이 프로그램에서 이 름과 생년월일을 키보드를 통해 입력 받는다면 우라는 Scanner 클래스를 이용해야 한다. 또한 1000부터 1009까지 임의의 번호를 생성하기 위해서 Random 클래스를 이용해야 한다. 이러한 클래스들은 java.util 패키지에 있다. 따라서 프로그램의 젓 부분에 다음과 같은 import 문을 사용해야 한다.

위의 알고리즘은 프로그램내의 main 메소드에서 구현되어야 한다, 알고리즘을 구현하기에 앞서 준비작업을 해야 한다. 먼저 Scanner 객제를 생성하고 한 변수가 그 객체를 가리키게 해야 한다. 이를 수행하는 문은 다음과 같다.

다음으로 1000부터 1009까지 임의의 번호를 생성하기 위해서 Random 객제를 생성하고 한 변수가 그 객체를 가리키게 해야 한다. 이를 수행하는 문은 다음과 같다.

알고리즘의 첫 번째 과정을 작성해 보자. 이름을 키보드를 통해 읽어 들이기 위해서 Scanner 객체의 next 메소드를 호출하여야 한다. 이 메소드 호출에 앞서 사용자에게 이름을 입력하라는 요청 메시지를 제공한다. 이를 위한 코드는 다음과 같다.

알고리즘의 두 번째 과정인 생년월일을 키보드를 통해 읽어 들이는 문은 비슷하게 작성할 수 있다. 알고리즘의 세 번째 과정을 작성해 보자. 생년월일(birthdate) 에서 Y’가 나오는 첫 번째 지수를 찾기 위해서 String 클래스의 indexOf 메소드를 이용하면 된다. 이를 수행하는 문은 다음과 같이 작성할 수 었다.

알고리즘의 네 번째 과정을 작성해 보자. 생년월일에서 연도를 끄집어 내기 위해서는 생년월일에서 첫 번째 Y’ 앞에 있는 문자열을 끄집어 내면 된다. 이를 수행하는 문은 문자열 birthdate 내에서 첫 번째 Y’ 가 나오는 지수 index를 이용하여 다음과 같이 작성할 수 있다.

알고리즘의 다섯 번째 과정을 작성해 보자. 문지열 birthdate 내에서 연도와 Y’를 삭제한 후 남은 문자열을 끄집어 내기 위해서는 String 클래스의 substring 메소드를 이용하면 된다. 즉, 문자열 birthdate 내에 (index + 2) 번째 위치에 있는 문자부터 마지막 문자까지의 부분 문자열을 끄집어 내면 된다. 이를 수행하는 문은 다음과 같이 작성할 수 있다.

알고리즘의 여섯 번째 과정 은 세 번째 과정과 비슷하게 작성할 수 있다. 알고리즘의 일곱번째 과정은 네 번째 과정과 비슷하게 작성할 수 있다. 알고리즘의 여넓 번째 과정은 다섯번째 과정과 비슷하게 작성할 수 있다. 알고리즘의 아흡 번째 과정을 작성해 보자. 1000부터 1009끼지 의 임의의 변호를 생성하기 위해서는 먼저 0부터 9까지의 임의의 번호를 생성한다. 다음으로 생성된 번호에 1000 을 더하면 된다. 이를 수행하는 문은 다음과 같이 작성할 수 있다.

알고리즘의 열 번째 과정은 학번은 18로 시작하는 6자리 숫자이므로 number에 180000을 더하면 된다. 이름,생년월일과 학번을 출력하는 문은 어렵지 않게 작성할 수 있다. 지금까지 적성한 문들을 합쳐서 main 메소드의 몸체로 만들고 main 메소드를 GenerateNumber 라는 클래스 안에 포함시킨 완전한 프로그램이다.

요약

• 클래스는 객체의 설계도이다.
• 클래스를 이용하기 위해서는 객체를 만들어야 한다.
• 한 클래스로부터 여러 개의 객체들을 만들 수 있다. 이 객체들을 서로 구별하기 위해 참조형 변수를 사용한다.
• 참조형 변수는 가리키는 객체의 주소를 저장한다.
• 메소드는 특정 일을 수행하는 명령문들의 나열이다.
• 메소드는 객체 메소드와 클래 스 메소드로 나뀐다.
• 메소드는 객제 혹은 클래스를 대상으로 호출되어야 한다.
• 표준 클래스 라이브러리는 프로그램들을 개발할 때 정의하지 않고 사용할 수 있는 클래스들의 모음이다.
• 클래스 라이브러리는 패키지들로 분류된다.
• java.lang 패키지의 모든 클래스들은 자동적으로 모든 프로그램에 불러들여진다.
• 프로그램에서 다른 패키지에 있는 클래스들을 편리하게 사용하기 위해서 우리는 import 선언문을 사용해야 한다.
• 자바에서는 문자열을 지원하기 위해 String 클래스를 제공한다. 이 클래스는 문자열을 쉽게 나타낼 수 있게 하고,문자열에 관한 여러 가지의 유용한 메소드들을 제공한다.
• 자바는 쌍따옴표 안에 있는 문자열을 만날 때 자동적으로 문자열 객체를 만든다. 문자열의 결합을 위해 연산자 + 를 사용한다.
• Random 클래스는 의사 난수 생성기 를 나타낸다.
• Math 클래스는 수식 계산을 하는데 도움을 주는 많은 기본적인 수학 함수들을 제공한다. 이 클래스의 모든 메소드들은 클래스 메 소드이다.

6609 reads

Author

No discussion

Please log in to leave a comment

16.5.11618.20190612.allo
Report · Terms of Service · Privacy Policy
Lablup Inc. · Teheran-ro 145, Gangnam-gu, Seoul, Republic of Korea · 대표: 신정규 · 사업자번호: 864-88-00080 · +82 70-8200-2587

Decline Confirm

Close
Favorite Bookmark Discussion

Please copy the following address