객체지향 프로그래밍
- 객체지향 프로그래밍: 현실 세계에서 어떠한 제품을 만들기 위해 부품들을 하나씩 조립해서 완성시키는 것처럼 소프트웨어 또한 필요한 부품들을 만들고 하나씩 조립해서 하나의 완성된 프로그램을 만들 수 있는데 이러한 기법을 말함
- 객체들끼리의 상호작용: 메서드를 통해 이루어짐
- 캡슐화: 접근 제어자를 통해 실제 내부 구현 내용을 외부에서 알 수 없게 감춤
- 상속: 부모 객체의 필드와 메서드를 자식 객체에 물려줘서 자식 객체가 사용할 수 있도록 함
- 다형성: 객체가 다른 여러가지 형태로 재구성됨
- 추상화: 객체의 공통된 부분들을 모아서 상위 개념으로 새롭게 선언
클래스 설계
- 단계: 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 |