객체 지향 프로그래밍

Godtaek·2024년 3월 12일
0

CS

목록 보기
2/4

1. 서론

소프트웨어 개발 방법론 중 하나로, 독립된 객체를 정의하여, 객체들의 상호작용을 통해 프로그램을 만드는 것

프로그램에서 필요한 데이터를 추상화하여 상태와 행위를 가진 객체를 만들고, 객체의 상호작용으로 프로그램을 만드는 것을 객체 지향이라고 한다. 객체 지향에 대해 간단히 훑어보겠다.

객체 지향은 어떤 특성을 가지는지, 좋은 객체 지향을 위해서 어떤 법칙이 존재하는지 알아보겠다.

2. 객체 지향 프로그래밍의 특성

  1. 추상화(Abstraction)
    추상화는 현실 세계의 복잡한 개념을 단순화하여 모델링하는 것.
    즉, 공통된 속성이나 개념을 찾고 정의하는 것.
    객체 지향에서는 클래스를 통해 추상화를 구현하고, 필요한 부분만을 표현함으로써 시스템을 이해하기 쉽게 만듦.

  2. 다형성(Polymorphism)
    같은 이름의 메서드나 연산자가 서로 다른 동작을 할 수 있는 능력.
    오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 다형성 구현.

  3. 캡슐화(Encapsulation)
    캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에 감추는 개념.
    객체 내부의 상태가 외부에서 직접 접근하는 것을 방지하고, 객체 간의 인터페이스를 통해 상호 작용 가능.

  4. 상속(Inheritance)
    상속은 기존 클래스의 속성과 메서드를 재사용하여 새로운 클래스를 만드는 개념.
    상속을 통해 코드의 재사용성이 증가하고 계층 구조를 형성할 수 있음.

3. SOLID 원칙

좋은 객체 지향 설계를 위한 기본적인 다섯가지 원칙

  1. 단일 책임 원칙 (Single Responsibility Principle, SRP):
    클래스는 하나의 책임만 가져야 한다.
    즉, 클래스가 변경되어야 하는 이유는 오직 하나여야 한다.
    이를 통해 클래스를 더 작고 응집력 있게 유지할 수 있다.

  2. 개방-폐쇄 원칙 (Open/Closed Principle, OCP):
    클래스, 모듈, 함수 등의 소프트웨어 요소는 확장에 대해 열려 있어야 하고 변경에 대해서는 닫혀 있어야 한다.
    즉, 기존의 코드를 변경하지 않고도 새로운 기능을 추가할 수 있어야 한다.
    그러니까 유지보수, 확장 등이 좋아야 된다는 셈

  3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP):
    상위 타입의 객체는 하위 타입의 객체로 교체할 수 있어야 한다.
    즉, 서브 타입은 슈퍼 타입의 기대 사항을 충족해야 한다.

class A extends B 일 때, B를 호출한 메서드에 A가 들어가도 실행되어야 한다는 말
  1. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP):
    클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다.
    인터페이스를 클라이언트별로 더 작고 구체적으로 분리함으로써 이 원칙을 준수할 수 있다.

  2. 의존 역전 원칙 (Dependency Inversion Principle, DIP):
    고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 모두 추상화에 의존해야 한다.
    즉, 추상화된 인터페이스에 의존해야 하며, 구체적인 구현에는 의존하면 안 된다.

4. 마치며

정말 수박 겉핥기식으로 넘어갔다.
그러나 이렇게 한번 짚고 넘어가는 것은 Spring IoC 컨테이너와 DI를 공부하기 위한 사전작업!

profile
성장하는 개발자가 되겠습니다

0개의 댓글