📢 생성자
👉🏻 클래스는 객체 지향 프로그래밍에서 객체를 생성하기 위한 템플릿.
👉🏻 자바에서 객체를 생성할 때는 생성자를 사용한다.
👉🏻 생성자는 객체의 초기화를 담당하며, 클래스명과 동일한 이름을 가진다.
👉🏻 기본 생성자: 클래스에 생성자가 없으면 기본 생성자가 자동 생성. 하나 이상의 생성자가 정의되면 기본 생성자는 제공되지 않는다.
👉🏻 생성자 오버로딩: 동일한 클래스 내에서 매개변수의 개수나 타입이 다른 여러 개의 생성자를 정의할 수 있다.
📢 실습(1)
자동차의 속성과 동작을 정의하는 Car Class 생성
// Car 클래스 생성
// 멤버변수 : name, color, year, power, speed => private 선언 (getter/ setter 생성)
// 소나타(블랙/2024) => 출력 메서드
// power : 시동 상태 나타내는 메서드 (true / false)
// speed : 속도 up / down 메서드
class Car{
private String name; //필수
private String color; //선택
private String year; //선택
private boolean power;
private int speed;
// Class의 위치 순서는 보통 이렇다 : 멤버변수 => 생성자 => 메서드 => getter/setter
// 생성자 위치
// 객체를 생성할 때 초기값 지정
// 생성자의 접근제한자는 반드시 public 이어야 함.
// 생성자명은 클래스명과 반드시 같아야 함.
// 생성자는 메서드와 달리 return 타입이 없음.
public Car() {} // 기본 생성자. 필수!
public Car(String name) {
this.name = name;
}
public Car(String name, String color) {
this.name = name;
this.color = color;
}
//불가능 : 오버로딩 조건에 충족이 안됨.
// public Car(String name, String year) {
//
// }
//생성자 호출 : 생성자 내에 다른 생성자의 값과 완전히 동일한 값이 있을 경우 사용 가능
public Car(String name, String color, String year) {
this(name, color); // 생성자 호출 : 반드시 첫줄에서 호출
// this.name = name;
// this.color = color;
// this.year = year;
this.year = year;
}
//생성자 생성 => 우클릭 Source => Generate Constructor usign Fields...
public Car(String name, String color, String year, boolean power, int speed) {
this(name, color,year); // 생성자 호출 : 반드시 첫줄에서 호출
this.power = power;
this.speed = speed;
}
public void printInfo() {
System.out.println(name+"("+color + "/"+year+")");
}
public void print() {
System.out.println("------------------");
System.out.println("power:"+ ((power)? "ON" : "OFF"));
if(!power) {
System.out.println("시동을 켜주세요.");
}else {
if(speed >= 200) {
System.out.println("최고 속도입니다. 속도를 줄이세요.");
}
if (speed <= 0) {
System.out.println("정지된 상태입니다.");
}
System.out.println("speed:"+speed);
}
}
// 꺼져 있으면 => 켜짐
// 켜져 있으면 => 꺼짐
// speed 가 있으면 시동이 꺼지면 안됨.
public void power() {
if(speed == 0) {
this.power = !this.power;
}else {
System.out.println("속도를 줄이세요. 시동을 끌 수 없습니다.");
}
}
//speedUp : power 켜져야 스피드가 올라갈수 있음. 200까지만 가능
public void speedUp() {
if(power) {
if(speed <200) {
speed += 10;
}
}
}
//speedDown : power 켜져야 스피드가 내려갈수 있음. 0까지만 가능
public void speedDown() {
if(power) {
if(speed >0) {
speed -= 10;
}
}
}
//getter/setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public boolean isPower() {
return power;
}
public void setPower(boolean power) {
this.power = power;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
}
public static void main(String[] args) {
Car c = new Car();
c.setName("SONATA");
c.setColor("red");
c.setYear("2024");
c.printInfo();
c.power();
c.speedUp();
c.print();
Car c1 = new Car("BMW");
c1.printInfo();
Car c2 = new Car("BMW", "gray");
c2.printInfo();
Car c3 = new Car("BMW", "gray", "2024");
c3.printInfo();
}
결과
SONATA(red/2024)
------------------
power:ON
speed:70
속도를 줄이세요. 시동을 끌 수 없습니다.
------------------
power:ON
정지된 상태입니다.
speed:0
------------------
power:OFF
시동을 켜주세요.
--------------
BMW(null/null)
BMW(gray/null)
BMW(gray/2024)
📢 실습(2)
TV를 모델링하는 Tv 클래스를 구현.
👉🏻 final 키워드를 사용하여 변경할 수 없는 값(상수)을 지정. 변수명을 대문자로 작성하는 것이 일반적인 관례. => get 메서드를 통해 값을 읽을 수 있지만, set 메서드를 통해 값을 변경할 수는 없다.
class Tv {
private final String BRAND = "LG";
private boolean power;
private int ch;
private int vol;
public Tv() {
this.vol = 3;
}
public void print() {
System.out.println(BRAND + " TV / CH: " + ch + " / VOL: " + vol);
}
public void power() {
power = !power;
if (power) {
System.out.println("전원 ON");
print();
} else {
System.out.println("전원 OFF");
}
}
public void chUp() {
if (power) {
ch = (ch + 1) % 21;
}
System.out.println("채널: " + ch);
}
public void chDown() {
if (power) {
ch = (ch - 1 + 21) % 21;
}
System.out.println("채널: " + ch);
}
public void volUp() {
if (power) {
if (vol < 10) {
vol++;
}
}
System.out.println("볼륨: " + vol);
}
public void volDown() {
if (power) {
if (vol > 0) {
vol--;
}
if (vol == 0) {
System.out.println("음소거");
}
}
System.out.println("볼륨: " + vol);
}
public String getBrand() {
return BRAND;
}
}
public class Class03 {
public static void main(String[] args) {
Tv t = new Tv();
t.power();
t.chUp();
t.chUp();
t.chUp();
t.chDown();
t.volUp();
t.volDown();
t.volDown();
}
}
결과
전원 ON
LG TV / CH: 0 / VOL: 3
채널: 1
채널: 2
채널: 3
채널: 2
볼륨: 4
볼륨: 3
클래스: 객체를 정의하는 구조체
생성자: 객체 초기화
오버로딩: 다양한 초기화 방식 제공
'백엔드 > Java' 카테고리의 다른 글
| Java로 학생 정보 관리 시스템 구현(1) (2) | 2024.10.02 |
|---|---|
| Java로 카드 게임 만들기 (4) | 2024.10.01 |
| Java 클래스(Class) (1) (0) | 2024.09.29 |
| Java로 로또 번호 생성기 만들기(1) (0) | 2024.09.29 |
| Java로 계산기 만들기 (1) | 2024.09.28 |