[Java] 클래스 구성 요소와 생성자

클래스 밖에 올 수 있는 3가지
- package - java 파일의 폴더 (패키지) 위치 - default 의 경우 폴더가 생성되지 않음
- inport - 다른 폴더 (패키지) 위치의 클래스를 참조
-
외부 클래스 (external class)
3-1. 외부에 포함된 또 다른 클래스
3-2. public 키워드를 사용할 수 없음
클래스 안에 올 수 있는 4가지
- 필드(멤버) - 클래스 특징(속성)을 나타내는 변수 (int age = 20)
-
메서드 (멤버) - 클래스의 기능 (void working(){…})
2-1. 리턴 타입 + 메서드 이름 + () + {} 로 구성
-
생성자
3-1. 객체 생성 기능 (생성자이름 + () + {}) - 생성자 이름은 클래스 이름과 동일하여야 합니다.
3-2. 메서드 이지만 반환형이 없는 형태이다.
-
내부 클래스 (inner class)(멤버)
4-1. 클래스 내부 정의된 클래스
기본 생성자의 자동 추가
- 생성자 이름하고 똑같다
- 매개변수 없다
- 반환형이 없다.
예제
package ch06;
// A 클래스는 에나서 임시 D클래스로 설정
class D {
int m;
void work() {
System.out.println(m); //0
}
// 컴파일러가 자동으로 추가해주는 기본 생성자
// A()
// {
// 객체 생성 이후에 해야 할 추가 일
// }
}
class B {
int m;
void work() {
System.out.println(m);
}
B(){ //기본 생성
}
}
class C{
int m;
void work() {
System.out.println(m); // 생성자로 넘어온 값
} // 오버로딩 된 생성
C(int a){ //생성자의 기본 기능 : 객체 생성 + 필드 초기화
m=a;
}
}
public class DefaultConstructor {
public static void main(String[] args) {
// #1. 클래스의객체 생성
D d = new D();
// 클래스참조 변수 = new(Heep 메모리에 넣어라)
// A(); 생성자 --> 출력값은 객체 (필드, 매서드, 이너 클래스 등)
B b = new B();
// C c = new C(); // 불가능
C c = new C(3);
//#2. 매서드 호출
d.work();
b.work();
c.work();
}
}
이슈 사항
아래의 코드가 오류가 나는 이유를 알아보자 ?
C c = new C();
해당 코드에서
C c = new C();가 오류가 나는 이유는C클래스에 매개변수가 있는 생성자C(int a)만 정의되어 있기 때문이다.생성자를 직접 정의하면 컴파일러는 기본 생성자를 자동으로 추가하지 않는다.
따라서 매개변수가 없는 기본 생성자
C()를 사용하려면,C클래스에서 기본 생성자를 명시적으로 정의해야 한다.
Leave a comment