코딩/자바

자바 문법 - 3주차

yoney 2024. 12. 31. 20:31


객체지향 프로그래밍

- 객체지향 프로그래밍: 현실 세계에서 어떠한 제품을 만들기 위해 부품들을 하나씩 조립해서 완성시키는 것처럼 소프트웨어 또한 필요한 부품들을 만들고 하나씩 조립해서 하나의 완성된 프로그램을 만들 수 있는데 이러한 기법을 말함

- 객체들끼리의 상호작용: 메서드를 통해 이루어짐

- 캡슐화: 접근 제어자를 통해 실제 내부 구현 내용을 외부에서 알 수 없게 감춤

- 상속: 부모 객체의 필드와 메서드를 자식 객체에 물려줘서 자식 객체가 사용할 수 있도록 함

- 다형성: 객체가 다른 여러가지 형태로 재구성됨

- 추상화: 객체의 공통된 부분들을 모아서 상위 개념으로 새롭게 선언

 

클래스 설계

- 단계: 1. 클래스 선언 2. 필드 정의(변수 선언) 3. 생성자 정의(= 객체 초기화 ex-public Car() { }) 4. 메서드 정의

 

객체 생성(=인스턴스화)

- car 클래스 객체 생성: Car car1 = new Car();  -> 생성자 불러오기

필드 종류

 

- 메소드 오버로딩: 동일한 메소드 이름으로 매개변수 타입이나 매개변수 개수에 따라 다르게 정의

- 인스턴스 멤버 vs 클래스 멤버: 인스턴스 멤버는 객체 생성 후에 사용할 수 있고 클래스 멤버는 객체 생성 없이도 사용 가능. 클래스 멤버는 static 키워드를 붙임, 공용적인 데이터 값을 static으로 지정함

- 인스턴스 메소드는 클래스 멤버를 사용할 수 없고 클래스 멤버는 인스턴스 멤버를 사용할 수 없음

- 상수는 static final을 붙여서 불변값으로 만듦. 상수명은 대문자로 작성

 

- 생성자 예시: this를 붙여서 객체 내부 멤버에 접근할 수 있도록 함

public Car(String model, String color, double price) { //this 사용
    this.model = model;
    this.color = color;
    this.price = price;
}

public Car(String model, String color) { //this() 사용
    this(model, color, 100000000);
}

 

 

- 제어자: public, protected, default, private / static, final, abstract

  • public : 접근 제한이 전혀 없습니다.
  • protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근이 가능합니다(클래스 앞에 사용 불가. 메소드, 변수에만 가능)
  • default : 같은 패키지 내에서만 접근이 가능합니다.
  • private : 같은 클래스 내에서만 접근이 가능합니다.(클래스 앞에 사용 불가. 메소드, 변수에만 가능)

 

- getter, setter: 외부에서 객체의 private한 필드를 읽을 필요가 있을 때 getter, 외부에서 객체의 private한 필드를 저장 또는 수정할 필요가 있을 때 setter 메소드 사용

 

- 상속: 자식 클래스 명+extends+부모클래스 명으로 정의. super는 부모 필드의 멤버를 나타내고 super()는 부모 필드의 생성자를 호출

//super 예시
public void setCarInfo(String model, String color, double price) {
    super.model = model; // model은 부모 필드에 set
    super.color = color; // color는 부모 필드에 set
    this.price = price; // price는 자식 필드에 set
}

// super() 예시
// 자식 클래스 SportsCar 생성자
public SportsCar(String model, String color, double price, String engine) {
     // this.engine = engine; // 오류 발생
    super(model, color, price);
    this.engine = engine;
}

 

 - 추상 클래스: public abstract class 클래스명{ abstract 리턴타입 메서드 이름(매개변수); } 으로 선언함. 미완성된 클래스. 나중에 자식 클래스에서 extends하여 오버라이딩을 통해 완성함

 

- 인터페이스: 두 객체를 연결해주는 다리 역할. 서로 다른 클래스들이 같은 메소드를 구현해야 할 때 인터페이스를 사용함. public interface 인터페이스명{} 으로 선언. 인터페이스에서 추상메소드 만들 수 있음. 인터페이스를 사용하려는 클래스에서는 implements 키워드를 통해 인터페이스를 가져와서 오버라이딩함. default, static 메소드 선언이 가능.

 

- default 메소드: 추상 메소드의 기본적인 구현을 제공하는 메소드. 추상메소드는 기본적으로 구현이 안되어있는 미완성 메소드인데 default를 붙이면 구현 가능. 오버라이딩도 필수가 아니게 됨

interface A {
    void a();
    default void aa() {
        System.out.println("AA");
    }
}

'코딩 > 자바' 카테고리의 다른 글

자바 문법 - 5주차(쓰레드)  (0) 2025.01.07
자바 문법 - 4주차(generic)  (0) 2025.01.06
자바 문법 - 4주차  (0) 2025.01.02
자바 문법 - 2주차  (0) 2024.12.31
자바 문법 - 1주차  (0) 2024.12.30