본문 바로가기
Etc

OOP 필수 개념

by SuperDT 2024. 11. 10.

OOP (Object-Oriented Programming)

  •  객체지향 프로그래밍(OOP, Object-Oriented Programming)이란, 객체를 중심으로 코드의 구조를 설계하고, 객체 간의 상호작용을 통해 문제를 해결하는 프로그래밍 패러다임
  •  좋은 OOP 설계를 위해서는 아래와 같은 핵심 원칙과 개념을 따르는 것이 중요

OOP의 핵심 원칙 (SOLID 원칙)

  1. SRP, 단일 책임 원칙(Single Responsibility Principle)
    •   클래스는 하나의 책임만 가져야 하며, 변경의 이유도 단 하나여야 함
    •   ex) Order 클래스가 주문 관련 정보만 관리하고, 이메일 발송은 EmailService가 맡도록 분리
  2. OCP, 개방-폐쇄 원칙(Open-Closed Principle)
    •   클래스는 확장에는 열려 있고, 수정에는 닫혀 있어야 함. 즉, 새로운 기능을 추가할 때 기존 코드를 수정하지 않고 확장할 수 있어야 함
    •   ex) Shape라는 추상 클래스에 새로운 Circle, Square 등의 도형을 추가해도 Shape 클래스 자체는 수정하지 않도록 함
  3. LSP, 리스코프 치환 원칙(Liskov Substitution Principle)
    •   자식은 부모 클래스의 기능을 모두 수행할 수 있어야 하며, 부모 클래스를 대체할 수 있어야 함
    •   ex) Bird 클래스가 fly() 메서드를 가진 경우, Penguin처럼 날지 못하는 새가 Bird를 상속하는 것은 리스코프 치환 원칙을 위반할 수 있음
  4. ISP, 인터페이스 분리 원칙(Interface Segregation Principle)
    •   클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않도록 작고 구체적인 인터페이스로 분리
    •   ex) Printer 인터페이스를 Print와 Scan 인터페이스로 나누면 프린터가 출력 기능만 사용하고 스캔 기능은 사용하지 않아도 됨
  5. DIP, 의존 역전 원칙(Dependency Inversion Principle)
    •   고수준 모듈이 저수준 모듈에 의존하지 않고, 추상화된 인터페이스에 의존
    •   ex) Database 클래스가 구체적인 MySQLDatabase 클래스에 의존하지 않고, DatabaseInterface와 같은 추상 인터페이스에 의존하도록 설계

OOP의 주요 개념

  1. 추상화(Abstraction)
    •   불필요한 세부 사항은 감추고, 객체가 가져야 할 본질적인 특징만 드러내는 것을 의미
    •   ex) Car 클래스는 주행에 필요한 기능들만 제공하고 내부 엔진 작동 방식은 감춤
  2. 캡슐화(Encapsulation)
    •   객체의 상태와 행위를 하나로 묶고, 외부에서 접근할 수 없도록 보호
    •   ex) 클래스의 private 멤버 변수는 getter와 setter 메서드를 통해 접근할 수 있도록 함
  3. 상속(Inheritance)
    •   기존 클래스를 확장하여 새로운 클래스를 정의하는 기능. 코드 재사용성을 높이고 계층적인 구조를 갖도록 함
    •   ex) Vehicle 클래스를 상속하여 Car와 Truck 클래스를 생성
  4. 다형성(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