TIL - Java 기초(5)

김지현·2023년 4월 11일
0

항해99

목록 보기
8/16

2023-04-11


생성자

객체가 생성될 때 호출되며 객체를 초기화하는 역할을 수행함

public Car() {}				// 선언
...
Car car = new Car();		// 호출
  • 모든 클래스는 반드시 생성자가 하나 이상 존재함
  • 생성자를 하나도 선언하지 않았다면 컴파일러가 기본 생성자를 자동으로 추가함
  • 생성자가 하나라도 선언되어있다면 컴파일러는 기본 생성자를 추가하지 않음
// 오버로딩 : 똑같은 메서드명을 사용하면서 매개변수의 종류에 따라 다른 기능을 수행하게 하는 것
// (1)
public Car(String modelName) {
	model = modelName;
	System.out.println("첫 번째 생성자가 호출되었습니다.");
}
// (2)
public Car(String modelName, String colorName) {
	model = modelName;
	color = colorName;
	System.out.println("두 번째 생성자가 호출되었습니다.");
}
// (3)
public Car(String modelName, String colorName, double priceValue) {
	model = modelName;
	color = colorName;
	price = priceValue;
	System.out.println("세 번째 생성자가 호출되었습니다.");
}
...
// GV60 모델만 기본으로 선택
Car car2 = new Car("GV60");
System.out.println("car2.model = " + car2.model + "\n");

// GV70 모델, 색상 Blue 만 기본으로 선택
Car car3 = new Car("GV70", "Blue");
System.out.println("car3.model = " + car3.model);
System.out.println("car3.color = " + car3.color + "\n");

// GV80 모델, 색상 Black, 가격 50000000 으로 완전하게 고정된 경우
Car car4 = new Car("GV80", "Black", 50000000);
System.out.println("car4.model = " + car4.model);
System.out.println("car4.color = " + car4.color);
System.out.println("car4.price = " + car4.price + "\n");

//
첫 번째 생성자가 호출되었습니다.
car2.model = GV60

두 번째 생성자가 호출되었습니다.
car3.model = GV70
car3.color = Blue

세 번째 생성자가 호출되었습니다.
car4.model = GV80
car4.color = Black
car4.price = 5.0E7

this

  • 인스턴스 자신을 표현하는 키워드
  • 객체 내부 멤버에 접근할 때 this 키워드가 필수는 아니지만 상황에 따라 필수가 될 수 있음

this( )

  • 인스턴스 자신의 생성자를 호출하는 키워드
// (1)
public Car(String model) {
	this(model, "Blue", 50000000);
}
// (2)
public Car(String model, String color) {
	this(model, color, 100000000);
}
// (3)
public Car(String model, String color, double price) {
	this.model = model;
	this.color = color;
	this.price = price;
}
// 리턴타입이 인스턴스 자신의 클래스 타입일 때
Car returnInstance() {
	return this;
}
...
// 모델을 변경하면서 만들 수 있고 색상 : Blue, 가격 50000000 고정
Car car1 = new Car("GV60");
System.out.println("car1.model = " + car1.model);
System.out.println("car1.color = " + car1.color);
System.out.println("car1.price = " + car1.price + "\n");

// 모델, 색상을 변경하면서 만들 수 있고 가격 100000000 고정
Car car2 = new Car("GV70", "Red");
System.out.println("car2.model = " + car2.model);
System.out.println("car2.color = " + car2.color);
System.out.println("car2.price = " + car2.price + "\n");

// GV80 모델, 색상 Black, 가격 120000000 으로 완전하게 고정된 경우
Car car3 = new Car("GV80", "Black", 120000000);
System.out.println("car3.model = " + car3.model);
System.out.println("car3.color = " + car3.color);
System.out.println("car3.price = " + car3.price + "\n");

// this 키워드를 통해 car3 인스턴스 자신을 반환 : car3.returnInstance() = 인스턴스의 주소
System.out.println(car3.returnInstance().model); // car3의 model
System.out.println(car3.returnInstance().color); // car3의 color
System.out.println(car3.returnInstance().price); // car3의 price

//
car1.model = GV60
car1.color = Blue
car1.price = 5.0E7

car2.model = GV70
car2.color = Red
car2.price = 1.0E8

car3.model = GV80
car3.color = Black
car3.price = 1.2E8

GV80
Black
1.2E8

접근 제어자

  • 클래스 내부에 선언된 데이터를 보호하기 위해 사용함
    1) public : 접근 제한이 전혀 없음
    2) protected : 같은 패키지 내, 다른 패키지의 자손클래스에서 접근 가능
    3) (default) : 같은 패키지 내에서만 접근 가능
    4) private : 같은 클래스 내에서만 접근 가능

■ 그 외 제어자

static , final , abstract

Getter

  • 외부에서 객체의 private 한 필드를 읽을 필요가 있을 때 getter 메서드를 사용함

Setter

  • 외부에서 객체의 private 한 필드를 저장/수정할 필요가 있을 때 Setter 메서드를 사용함

패키지

( package )

  • 클래스의 일부분이면서 클래스를 식별해 주는 용도
  • package 상위패키지.하위패키지;

import

  • 다른 패키지에 있는 클래스를 사용하기 위해 명시하는 키워드
import week03.packageExample.pk1.Car;

public class Main {
    public static void main(String[] args) {
        Car car = new Car();
        car.horn();
    }
}

상속

  • extends 키워드 사용
public class 자식클래스 extends 부모클래스 {
	...
}
  • 부모 클래스에 새로운 필드와 메서드가 추가되면 자식 클래스는 이를 상속받아 사용할 수 있음
  • 자식 클래스에 새로운 필드와 메서드가 추가되어도 부모 클래스는 영향을 받지 않음
  • Java에서는 다중 상속을 허용하지 않음 (클래스간의 관계가 너무 복잡해짐)
  • 부모 클래스에서 final 키워드를 사용하여 선언한 클래스는 더 이상 상속할 수 없는 클래스가 됨
  • 부모 클래스에서 final 키워들르 사용하여 선언한 메서드는 더 이상 오버라이딩할 수 없는 메서드가 됨

상속관계

~은 ~이다

포함관계

~은 ~을 가지고 있다

0개의 댓글

관련 채용 정보