일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 데이터 송수신
- 네트워크
- 자바의 정석
- 계층화
- 다형성
- 역캡슐화
- modifiers
- 개발바닥
- 물리구성도
- 논리구성도
- 1764
- AWS CLF
- 백준 1712
- TCP/IP
- 인터페이스
- 파이썬 1712
- network
- 테슬라폰
- aws 자격증
- java
- 인프콘
- 10866
- l3 스위치
- 자바
- 상속
- 남궁성
- 백준 2775
- 프로토콜
- 유선LAN
- 파이썬
- Today
- Total
병훈's Blog
[Java] 생성자 (Constructor) 본문
- 참고: Java의 정석
생성자 (Constructor)
자 저번 시간에 클래스와 객체에 대해서는 공부했었죠?
Java를 시작하면 처음에 변수의 선언과 초기화를 배우구요.
자 이번에는 위 두 개념을 합쳐볼 거예요!
클래스를 만듭니다. 변수와 메서드가 있겠죠?
그 중에서 변수가 선언만 되고, 초기화가 안 된 상황이에요.
이제 값을 넣을 건데...
'아.. 객체를 생성한 후에,
내가 일일히 변수에 값을 넣어줘야 하나?
c.kind = "Heart";
매번 이러면 너무 귀찮아...ㅠㅠ
더 좋은 방법은 없을까?'
있습니다. 바로 생성자를 이용하는 것이죠
생성자가 뭔데??
- 인스턴스가 생성될 때마다 기본으로 호출되는 '인스턴스 초기화 메소드'
- 인스턴스 변수의 초기화 or 인스턴스 생성과 동시에 수행할 기능이다.
- ※ 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
자 설명이 부족하죠? 하나씩 살펴 보자구요.
Card card = new Card();
Card 클래스의 참조변수(주소를 저장하는 변수)를
card라는 이름으로 만들었어요.
그리고 new Card();
로 인스턴스를 만들었어요.
그럼 이 인스턴스의 주소값이 card에 저장돼요.
new 가 인스턴스를 생성하는 키워드라면 Card() 는 뭘까요?
Card()
가 생성자에요.
클래스 이름이랑 똑같은 메소드의 형태죠.
즉, Card card = new Card();
이 코드는
Card() 생성자가 시키는대로 new (새로운) 인스턴스를 만들자!!
그리고 이 인스턴스의 주소를 참조변수 card 에 넣어주자!!
그럼 참조변수를 통해 인스턴스의 멤버(변수,메소드)들을 다룰 수 있어!!
데이터를 담아서 활용하거나, 특정 기능을 수행시킬 수 있다고!!
이런 의미입니다.
근데, 위에서 이런 말을 했어요.
※ 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
하지만 전에는 생성자를 안 적었단 말이죠?
그 이유는 생성자를 클래스에 작성하지 않아도,
컴파일러가 기본 생성자 Card() {}
를 생성해주기 때문이에요.
( 매개변수가 없는 생성자가 기본 생성자 )
근데, 매개변수가 있는 생성자를 써놓잖아요? Card(String x) {}
그럼 컴파일러는 기본 생성자를 만들어 주지 않아요.
이미 생성자가 있으니, 기본 생성자를 만들 필요가 없는 거죠
근데 기본 생성자가 없으면 나중에 에러가 발생할 수 있어요.
앞으로는 클래스를 생성할 때 기본 생성자를 직.접. 적어주자고요!
한 번 매개변수가 있는 생성자의 예시를 볼까요?
class Car {
String color; // 차의 색
String gearType; // 차의 기어유형
int door; // 차 문의 개수
Car () {} // 기본 생성자
Car(String color, String gearType, int door) { // 매개변수가 있는 생성자
this.color = color; //this.color은 인스턴스변수, color은 매개변수로 받아온 지역변수다.
this.gearType = gearType;
this.door = door;
}
}
Car c1 = new Car();
Car c2 = new Car("white","auto",4);
- c1은 기본 생성자를 통해 인스턴스가 만들어지죠.
이러면 변수에 값을 저장하는 코드를 직접 작성해야 돼죠. - c2는 매개변수가 있는 생성자를 통해 인스턴스를 만들었어요.
"white","auto",4 가 각각 color, gearType, door에 저장된 채로 인스턴스가 만들어지죠.
이렇게 인스턴스변수를 생성과 동시에 초기화 시킬 수 있어요.
아까 봤던 생성자 설명
- 클래스명과 동일한 메소드명을 사용한다.
- 인스턴스가 생성될 때마다 기본으로 호출되는 '인스턴스 초기화 메소드'
- 인스턴스 변수의 초기화 or 인스턴스 생성과 동시에 수행할 기능이다.
- ※ 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
이제 이해가 좀 되죠?
축하해요. 다음에 또 만나요~
'Java' 카테고리의 다른 글
[Java] 초기화 (initialized) (0) | 2022.09.25 |
---|---|
[Java] this (0) | 2022.09.25 |
[Java] 메소드 오버로딩 (Method Overloading) (0) | 2022.09.25 |
[Java] 변수와 메소드 / JVM (0) | 2022.09.25 |
[Java] 클래스와 객체 (Class and Object) (0) | 2022.09.25 |