OOP (Object-Oriented Programming)
- 객체지향 프로그래밍(OOP, Object-Oriented Programming)이란, 객체를 중심으로 코드의 구조를 설계하고, 객체 간의 상호작용을 통해 문제를 해결하는 프로그래밍 패러다임
- 좋은 OOP 설계를 위해서는 아래와 같은 핵심 원칙과 개념을 따르는 것이 중요
OOP의 핵심 원칙 (SOLID 원칙)
- SRP, 단일 책임 원칙(Single Responsibility Principle)
- 클래스는 하나의 책임만 가져야 하며, 변경의 이유도 단 하나여야 함
- ex) Order 클래스가 주문 관련 정보만 관리하고, 이메일 발송은 EmailService가 맡도록 분리
- OCP, 개방-폐쇄 원칙(Open-Closed Principle)
- 클래스는 확장에는 열려 있고, 수정에는 닫혀 있어야 함. 즉, 새로운 기능을 추가할 때 기존 코드를 수정하지 않고 확장할 수 있어야 함
- ex) Shape라는 추상 클래스에 새로운 Circle, Square 등의 도형을 추가해도 Shape 클래스 자체는 수정하지 않도록 함
- LSP, 리스코프 치환 원칙(Liskov Substitution Principle)
- 자식은 부모 클래스의 기능을 모두 수행할 수 있어야 하며, 부모 클래스를 대체할 수 있어야 함
- ex) Bird 클래스가 fly() 메서드를 가진 경우, Penguin처럼 날지 못하는 새가 Bird를 상속하는 것은 리스코프 치환 원칙을 위반할 수 있음
- ISP, 인터페이스 분리 원칙(Interface Segregation Principle)
- 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않도록 작고 구체적인 인터페이스로 분리
- ex) Printer 인터페이스를 Print와 Scan 인터페이스로 나누면 프린터가 출력 기능만 사용하고 스캔 기능은 사용하지 않아도 됨
- DIP, 의존 역전 원칙(Dependency Inversion Principle)
- 고수준 모듈이 저수준 모듈에 의존하지 않고, 추상화된 인터페이스에 의존
- ex) Database 클래스가 구체적인 MySQLDatabase 클래스에 의존하지 않고, DatabaseInterface와 같은 추상 인터페이스에 의존하도록 설계
OOP의 주요 개념
- 추상화(Abstraction)
- 불필요한 세부 사항은 감추고, 객체가 가져야 할 본질적인 특징만 드러내는 것을 의미
- ex) Car 클래스는 주행에 필요한 기능들만 제공하고 내부 엔진 작동 방식은 감춤
- 캡슐화(Encapsulation)
- 객체의 상태와 행위를 하나로 묶고, 외부에서 접근할 수 없도록 보호
- ex) 클래스의 private 멤버 변수는 getter와 setter 메서드를 통해 접근할 수 있도록 함
- 상속(Inheritance)
- 기존 클래스를 확장하여 새로운 클래스를 정의하는 기능. 코드 재사용성을 높이고 계층적인 구조를 갖도록 함
- ex) Vehicle 클래스를 상속하여 Car와 Truck 클래스를 생성
- 다형성(Polymorphism)
- 같은 인터페이스를 통해 다양한 구현을 사용할 수 있게 하여 유연성을 높임
- ex) Animal 인터페이스의 makeSound() 메서드를 구현한 Dog 클래스는 Bark를, Cat 클래스는 Meow를 출력하도록 구현
'Etc' 카테고리의 다른 글
Java 예외처리 기본개념 (0) | 2024.11.17 |
---|---|
프록시 개념 (0) | 2024.11.17 |
자바 기본형과 참조형의 차이점? (0) | 2024.11.10 |
Stream API와 레거시 For (0) | 2024.11.03 |
프로메테우스와 그라파나 (0) | 2024.10.27 |