객체 지향 프로그래밍
- 프로그램을 '객체'라는 기본 요소로 봄
→ 이들 간의 관계를 형성하거나 상호작용함으로써 프로그램을 설계/구현하는 방법론
- 객체
: 데이터 (상태)와 데이터를 처리하는 함수 (행동)를 하나로 묶은 것
# 핵심 원리
1) 캡슐화 (Encapsulation)
: 객체의 데이터를 외부로부터 직접 접근할 수 없도록 숨기고, 함수를 통해서만 접근하도록 함
→ 객체의 내부 데이터를 보호하고, 객체가 받아들일 수 있는 연산을 제어함
2) 상속 (Inheritance)
: 한 클래스의 속성/메서드를 다른 클래스가 물려받는 것
→ 코드의 재사용성 향상 & 중복된 코드 축소
3) 다형성 (Polymorphism)
: 하나의 메서드/클래스가 있을 때, 이러한 것들이 다양한 방법으로 동작하는 것
ex) 같은 이름의 메서드가 인자에 따라 다른 동작을 하는 것
ex) 하나의 변수가 여러 타입의 객체를 참조할 수 있는 것
객체지향 프로그래밍의 SOLID 원칙
1) Single Responsibility Principle (SRP, 단일 책임 원칙)
: 한 클래스는 하나의 책임만을 가져야 함
2) Open/Closed Principle (OCP, 개방 폐쇄 원칙)
: 클래스는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 함
3) Liskov Substitution Principle (LSP, 리스코프 치환 법칙)
: 상위 타입의 객체를 하위 타입의 객체로 치환해도 프로그램은 일관성을 유지해야 함
4) Interface Segregation Principle (ISP, 인터페이스 분리 원칙)
: 사용하지 않는 인터페이스의 영향을 받지 않아야 함
→ 한 클래스는 자신이 사용하지 않는 인터페이스를 구현하지 않아야 함
5) Dependency Inversion Principle (DIP, 의존관계 역전 원리)
: 상위 모듈은 하위 모듈에 의존하면 안되고, 모두가 추상화에 의존해야 함
→ 세부 사항은 추상화에 의존해야 함
- 의존 관계를 맺을 때에는 변화하기 쉬운 것보다는 변화하기 어려운 것에 의존해야 함
· 변화하기 쉬운 것 : 구체화된 클래스
· 변화하기 어려운 것 : 추상 클래스, 인터페이스
'Java > Base' 카테고리의 다른 글
[Java] JVM (Java Virtual Machine) (0) | 2023.06.18 |
---|---|
[Java] Garbage Collection (0) | 2023.06.18 |
[Java] 데이터 형식 지정 (0) | 2023.04.20 |
[Java] 스트림 (Stream) (0) | 2023.04.07 |
[Java] 람다 표현식 (Lambda expression) (0) | 2023.03.22 |