Jin's Dev Story

[SpringBoot] OOP(Object Oriented Programming) 본문

Web & Android/SpringBoot

[SpringBoot] OOP(Object Oriented Programming)

woojin._. 2023. 8. 12. 13:34

OOP(객체 지향 프로그래밍)란 문제를 여러 개의 객체 단위로 나눠 작업하는 방식으로, 객체들이 서로 유기적으로 상호작용하는 프로그래밍 이론

객체 지향의 4대 특성

1. 캡슐화 (Encapsulation)

  • 데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법
  • 캡슐화의 중요한 목적은 변수를 private로 선언하여 데이터를 보호하고, 보호된 변수는 getter나 setter등의 메서드를 통해서만 간접적으로 접근을 허용하는 것
  • 캡슐화를 하면 불필요한 정보를 감출 수 있기 때문에, 정보은닉을 할 수 있다는 특징이 있다. 캡슐화와 정보은닉은 동일한 개념은 아님

2. 추상화 (Abstraction)

  • 객체의 공통적인 속성과 기능을 추출하여 정의하는 것.
  • 다시 말해 실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통 특성을 파악해 필요 없는 특성을 제거하는 과정을 가르킴
  • 객체들은 실제 그 모습이지만, 클래스는 객체들이 어떤 특징들이 있어야 한다고 정의하는 추상화된 개념
  • 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법

3. 상속(Inheritance)

  • 기존 상위 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새로운 하위 클래스에 새로운 기능도 추가할 수 있는 것
  • 상속이 필요한 이유는 코드의 중복을 없애기 위해서
    • 코드의 중복이 많아지면 개발 단계와 유지 보수에서 많은 비용이 들게 됨
  • 상속 관계를 맺으면 자식 객체를 생성할 때 부모 클래스의 속성들을 자동으로 물려받기 때문에 자식 클래스에서 또 정의할 필요가 없음

4. 다형성(Polymorphism)

  • 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러 형태(객체)로 재구성 되는 것을 말함
  • 오버라이딩은 하위 클래스(자식)가 상위 클래스(부모)에서 만들어진 메서드를 자신의 입맛대로 다시 재창조해서 사용하는 것
  • 오버로딩은 하나의 클래스 안에서 같은 이름의 메서드를 사용하지만 각 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현하는 것을 말함
    • 메서드끼리 이름은 같지만 매개변수의 개수나 데이터 타입이 달라야 
  • API가 많아질수록 복잡성은 증가하기 때문에 다형성은 유용하며 코드 재사용성을 늘려주어 유지보수가 용이하도록 도와주는 개념

 

OOP의 장단점

장점

  • 코드 재사용성 증가
  • 생산성 향상
  • 자연적인 모델링
  • 유지보수의 우수성

단점

  • 개발 속도가 느림
  • 실행 속도가 느림
  • 코딩 난이도 상승

객체지향 설계 5원칙 SOLID

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

  • 모든 클래스는 각각 하나의 책임만 가져야 함

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

  • 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 함
  • 상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신은 변화에 대해서는 폐쇄적이지만, 인터페이스는 외부의 변화에 대해서 확장을 개방해 줄 수 있음

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

  • 서브 타입은 언제나 자신의 기반(상위) 타입으로 교체 할 수 있어야 함

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

  • 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안됨
  • 프로젝트의 요구 사항, 설계를 고려하여 SRP(단일책임원칙) or ISP(인터페이스분리원칙)를 선택

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

  • 자신보다 변하기 쉬운 것에 의존하지 말아야 함

'Web & Android > SpringBoot' 카테고리의 다른 글

[SpringBoot] Design Pattern  (0) 2023.08.14
[SpringBoot] AOP(Aspect Oriented Programming)  (0) 2023.08.12
[SpringBoot] IoC &DI  (0) 2023.08.12
[SpringBoot] Spring Boot  (0) 2023.08.12
[SpringBoot] Spring  (0) 2023.08.12