[CS공부] OOP특성과 설계원칙(SOLID)

탄니야·2024년 7월 15일

cs공부

목록 보기
4/8

OOP(Object Oriented Programming)란?

현실 세계의 사물및 개념들을 객체로 보고, 그 객체들을 조립하여 프로그래밍 하는 기법
절차지향적 프로그래밍에서 있었던 코드의 재사용성중복제거가 가장 큰 목적으로 만들어진 기법

객체지향의 4가지 특성

1. 추상화

  • 객체의 공통된 속성들 중 필요한 부분을 포착해서 클래스로 정의하는 설계 기법
  • 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것
    (ex: 남자 와 여자의 추상적 객체 = 사람)

2. 캡슐화

  • 외부로부터 데이터 보호, 은닉 / 유지보수의 용이성 증가시킨다.
  • 캡슐화란 클래스 내의 연관된 속성(property)이나 함수(method)를 하나의 캡슐로 묶어 외부로부터 클래스로의 접근을 최소화하는 것을 의미한다.
  • 클래스의 캡슐화는 public, static, private, protected와 같은 접근제한자를 통해 구현할 수 있다.

3. 상속화

  • 대상을 객체로 추상화/구현할 때, 기존에 구현한 클래스를 재활용하여 구현할 수 있는 것을 의미한다.
  • 재활용한 클래스:상위 클래스 / 기존 클래스를 재활용하여 구현한 클래스: 하위 클래스
  • 이러한 상속을 통해 코드 재사용성을 높일 수 있다.

4. 다형화

  • 같은 형태이지만 다른 기능을 하는 것
  • 어떤 객체의 속성이나 기능이 상황에 따라 여러 형태로 변할 수 있다는 것을 의미
  • 다형성을 구현하는 예시로는 상속/구현 상황에서 메서드 오버라이딩/오버로딩이 있다.

OOP의 5가지 설계원칙(SOLID)

1. SRP( Single Responsibility Principle, 단일 책임 원칙)

  • 클래스는 하나의 책임만 가져야 한다.
  • 단일 책임 원칙을 제대로 지키면 변경이 필요할 때 수정할 대상이 명확해진다.

2. OCP(Open-Closed Principle, 개방-폐쇄 원칙)

  • 확장에 대해 열려있고 수정에 대해서는 닫혀있어야 한다.
    확장에 대해 열려 있다: 요구사항이 변경될 때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할 수 있다.
    수정에 대해 닫혀 있다: 기존의 코드를 수정하지 않고 애플리케이션의 동작을 추가하거나 변경할 수 있다.

3. LSP(Liskov Substitution Principle, 리스코프 치환 원칙)

  • 하위 타입은 상위 타입을 대체할 수 있어야 한다
  • 해당 객체를 사용하는 클라이언트는 상위 타입이 하위 타입으로 변경되어도, 차이점을 인식하지 못한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용할 수 있어야 한다

4. ISP(Interface segregation principle, 인터페이스 분리 원칙)

  • 클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공하는 것

5. DIP(Dependency Inversion Principle, 의존 역전 원칙)

  • 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되며, 저수준 모듈이 고수준 모듈에 의존해야 한다
    고수준 모듈: 입력과 출력으로부터 먼(비즈니스와 관련된) 추상화된 모듈
    저수준 모듈: 입력과 출력으로부터 가까운(HTTP, 데이터베이스, 캐시 등과 관련된) 구현 모듈
  • 비즈니스와 관련된 부분이 세부 사항에는 의존하지 않는 설계 원칙
  • 의존 역전 원칙은 개방 폐쇄 원칙과 밀접한 관련이 있으며, 의존 역전 원칙이 위배되면 개방 폐쇄 원칙 역시 위배될 가능성이 높다.

참고: https://mangkyu.tistory.com/194 [MangKyu's Diary:티스토리]

profile
반갑습니다

0개의 댓글