티스토리 뷰
클래스의 구조
클래스는 필드(Field), 메소드(Method), 생성자(Constructor)로 이루어져있다.
이 구성 멤버들은 생략과 복수개의 작성이 가능하다.
현 포스팅에서는 클래스의 구성 멤버들에 대한 대략적인 소개만을 담겠다.
구성 멤버들의 사용 및 오버로딩에 관한 내용은 따로 포스팅 하겠다.
클래스의 구조
public class ClassName{
//필드
int fileldName;
//생성자
ClassName(){
//생성자 내용 부분
}
//메소드
void methodName(){
//메소드 내용 부분
}
}
1. 필드(Field)
필드란 객체의 고유 데이터, 부품 객체, 상태정보를 저장하는 공간이다.
예를 들어, 빌딩 클래스를 설계 할 때, 고유 데이터, 상태, 부품들은 모두 필드로 선언할 수 있다.
다음은 필드 선언의 예시이다.
public class Building {
//고유 데이터
int height = 300; //빌딩 높이
String address = "경기도"; //빌딩 주소
String company; //빌딩 건설사
int room; //방의 개수
//상태
int year; //빌딩 년식
int HouseHold; //빌딩 세대원
//부품
Paint paint; //페인트
Brick brick; //벽돌
}
필드는 기본적으로 클래스 중괄호 블록 어디서든 존재 가능하다.
하지만, 생성자와 메소드 중괄호 내부에는 선언될 수 없다.
생성자와 메소드 중괄호 내부에 선언된 것은 모두 로컬 변수가 된다.
필드의 선언은 기본적으로 변수 선언과 매우 비슷하다.
변수는 생성자와 메소드 내에서만 사용되고, 생성자와 메소드의 실행 종료 시 사라진다.
하지만, 필드는 객체가 소멸되지 않는 한 객체와 함께 존재한다는 점에서 변수와 다르다.
초기값이 지정되지 않은 필드들은 객체 생성 시 자동으로 기본 초기값으로 설정된다.
기본 초기값은 다음 표를 참고하라.
2. 생성자(Constructor)
생성자는 객체 생성 시 초기화를 담당한다.
필드를 초기화하거나, 메소드를 호출해서 객체를 사용할 준비를 한다.
생성자는 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고 리턴 타입이 없다.
만약, 생성자가 성공적으로 실행되지 않고 예외(에러)가 발생했다면 객체는 생성되지 않는다.
모든 클래스에는 생성자가 반드시 존재하며, 하나 이상을 가질 수 없다.
우리가 클래스 내부에 생성자 선언을 생략하면, 컴파일러에 의해 중괄호 내용이 생략된 기본 생성자가 자동 추가된다.
생성자의 선언은
클래스(생성자)의 이름 (매개변수) {
//객체의 초기화 코드
}
으로 이루어진다.
다음은 생성자 선언의 예시이다.
public class Building {
//필드
int height;
String address;
String company;
building(int he, String addr, String com){
height = he; //height 필드를 he로 초기화
address = addr; //address 필드를 addr로 초기화
company = com; //company 필드를 com으로 초기화
}
}
생성자에서 매개변수 선언은 생략가능하고, 여러개 선언도 가능하다.
매개변수는 new 연산자로 생성자를 호출할 때 외부의 값을 생성자 블록 내부로 전달하는 역할을 한다.
클래스에 생성자가 명시적으로 선언되어 있을 경우에는 반드시 선언된 생성자를 호출해서 객체를 생성해야만 한다.
즉, 기본 생성자를 호출하여 객체를 생성 할 수 없다.
3. 메소드(Method)
메소드는 객체의 동작에 해당하는 중괄호를 말한다. 중괄호는 이름이 곧 메소드 이름이다.
메소드를 호출하면, 중괄호에 있는 모든 코드들이 일괄적으로 실행된다.
메소드는 필드를 읽고 수정하고, 다른 객체를 생성하여 다양한 기능을 수행하는 역할을 한다.
객체 간 데이터의 전달 수단으로 메소드가 사용되기도 한다.
즉, C에서 함수의 역할을 하는 것이 메소드라고 볼 수 있다.
메소드의 선언은 다음과 같이 선언부(리턴타입, 메소드이름, 매개변수 선언)과 실행 블록으로 구성된다.
리턴타입 메소드이름(매개변수 선언){
//실행코드
}
ex:)
int sum(int num1, int num2){
int result = num1 + num2;
return result;
}
리턴 타입은 메소드가 실행 후 리턴하는 값의 타입을 말하며, int, String, double, 배열, 객체명 등이 올 수 있다.
그 중 void는 리턴 값이 없는 경우의 리턴타입을 의미한다.
리턴값과 리턴타입이 일치하지 않으면 컴파일 오류가 발생한다.
메소드의 이름은 다음 규칙에 유의하여 지어야한다. (자바 식별자 규칙)
1. 숫자로 시작하면 안된다.
2. $와 _을 제외한 특수 문자 사용이 불가하다.
3. 관례적으로 메소드 명은 소문자로 작성한다.
4. 서로 다른 단어가 혼합된 이름이라면 뒤이어 오는 단어의 첫머리 글자는 대문자로 작성한다.
매개 변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용된다.
매개 변수도 필요한 경우가 있고, 필요없는 경우가 있으므로 생략 또는 다수의 매개변수 선언이 가능하다.
매개 변수는 개수가 이미 정해져 있는 것이 일반적이지만, 경우에 따라서 메소드를 선언할 때 매개 변수의 개수를 알 수 없는 경우가 존재한다.
이런 경우, 매개변수를 '...'을 이용하여 선언하면 된다.
이 때, 메소드 호출 시 넘겨준 값의 수에 따라 자동으로 배열이 생성되고 매개값으로 사용된다.
ex:)
int sum( int ...values) {
int sum = 0;
for(int i=0; i<values.length; i++ ){
sum += values[i];
}
return sum;
}
'JAVA' 카테고리의 다른 글
싱글톤(Singleton) (0) | 2019.09.16 |
---|---|
정적 멤버와 인스턴스 멤버 (0) | 2019.09.16 |
클래스 구성 멤버들의 사용 및 오버로딩 (0) | 2019.09.11 |
객체와 클래스 (0) | 2019.09.10 |
객체지향 프로그래밍 (0) | 2019.09.09 |