생성자의 특징
- 생성자의 이름은 클래스의 이름과 대/소문자까지 완벽하게 동일해야 한다.
- 객체를 생성할 때 반드시 호출해야 한다.
- 일종의 메서드지만, 리턴 타입이 없고 리턴값은 주소값으로 고정되어 있음.
- 생성자를 하나도 선언하지 않으면, JVM이 매개변수가 없고, 내용이 없는 가장 기본 형태의 생성자를 하나 생성해 주기 때문에 생성자 선언 없이도 객체 생성은 가능하다.
- 객체를 생성하는 기능 뿐만 아니라, 객체 생성과 동시에 해야 할 일 (필드 초기화) 등을 진행할 수 있다.
접근제한자
package day07.encap;
public class Car {
private String model; // 자동차 모델명
private int speed; // 현재 속도
private char mode; // 변속 모드 (D, N, R, P)
private boolean start; // 시동이 걸린 여부
// 생성자
Car(String model) {
this.model = model;
// this.speed = 0; 안넣어도됨 int 의 기본값 0
this.mode = 'P';
// this.start = false; 안넣어도됨 boolean 의 기본값 false
}
// 엔진에 연료가 주입되는 기능
private void injectGasoline() {
if(start) {
System.out.println("엔진에 연료가 주입됩니다.");
} else {
System.out.println("시동이 켜지지 않았습니다.");
System.out.println("자동차가 폭발합니다");
}
}
// 엔진오일이 순환하는 기능
private void moveEngineOil() {
System.out.println("엔진오일이 순환합니다.");
}
// 엔진 내부에 있는 실린더가 작동하는 기능
private void moveCylinder() {
System.out.println("엔진 내부 실린더가 왕복으로 움직입니다.");
}
// 시동 버튼을 누르는 기능
public void startStop() {
this.start = !this.start;
if (start) {
System.out.println("시동이 켜졌습니다. 운행준비를 시작합니다.");
injectGasoline();
moveEngineOil();
moveCylinder();
} else {
System.out.println("시동이 꺼졌습니다. 다음에 다시 만나요~");
}
}
// 현재 속도를 제한하는 메서드
// setter 메서드 : 필드값을 안전하게 설정하기 위한 검증로직이 포함된 메서드
public void setSpeed(int speed) {
if (speed < 0 || speed > 200) {
this.speed = 0;
this.start = false;
this.mode = 'P';
System.out.println("제한 속도 위반으로 시동이 안전하게 꺼졌습니다.");
} else {
this.speed = speed;
}
}
// 현재 속도값을 가져오는 메서드
// getter : 정보은닉된 필드를 가져오는 대리 메서드
public int getSpeed() {
return speed;
}
// boolean 필드의 getter 는 이름관례가 다름 is + 필드명
public boolean isStart() {
return start;
}
public char getMode() {
return mode;
}
public void setMode(char mode) {
switch (mode) {
case 'P': case 'N': case 'D': case 'R':
this.mode = mode;
break;
default:
this.mode = 'P';
}
}
}
순서대로 위에서 부터 클래스내에는 필드 / 생성자 / 메서드 가 있다고 보면 된다. 생성자의 이름은 클래스명과 같다는걸 기억하자.
하지만 메서드의 이름은 클래스명이랑 다르다.
위 코드에서는 사용자가 접근할 수 있는 제한에 관한 학습을 했다. 예를들어 자동차가 있을 때 소비자들은 엔진의 내부까지 알 필요는 없듯
또 엔진의 어떤 설정을 바꾸어 차에 무리가 가도록 하지 않도록 제한을 걸어두듯 private 이라는 명령어를 앞에 붙여 제한시킬 수 있다.
좀 더 정확히 말하자면 숨기는 것이다. 하지만 숨겨진 정보를 기능들은 사용을 해야되니 메서드는 public으로 해준다.
여기서 void 란 default 값을 말한다. public, private 모두가 될 수 있는 상태이다.
// setter 메서드 : 필드값을 안전하게 설정하기 위한 검증로직이 포함된 메서드
public void setSpeed(int speed) {
if (speed < 0 || speed > 200) {
this.speed = 0;
this.start = false;
this.mode = 'P';
System.out.println("제한 속도 위반으로 시동이 안전하게 꺼졌습니다.");
} else {
this.speed = speed;
}
}
// 현재 속도값을 가져오는 메서드
// getter : 정보은닉된 필드를 가져오는 대리 메서드
public int getSpeed() {
return speed;
}
setter 와 getter 를 이용해야 숨겨진 정보들을 불러올 수 있다.
'Java' 카테고리의 다른 글
[중앙정보처리학원] Java* 객체지향 상속 (Inheritance) (0) | 2024.04.22 |
---|---|
[중앙정보처리학원] Java* 객체지향 Practice (0) | 2024.04.18 |
[중앙정보처리학원] Java* 객체지향 프로그래밍 (1) | 2024.04.18 |
[중앙정보처리학원] Java* 메서드 basic (1) | 2024.04.12 |
[중앙정보처리학원] Java* Matrix (1) | 2024.04.12 |