객체지향이란?

김회민·2023년 2월 11일
0

Java

목록 보기
1/16

객체지향 프로그래밍 - OOP

Object Oriented Programming

정의

객체지향 프로그래밍이란, 기능이 아닌 객체가 중심이 되어, 객체에 따른 역할과 서로 다른 객체 간의 관계를 정의하여 개발하는 기법을 말한다.

장점

객체라는 작은 단위로 쪼개어 개발하기 때문에 확장성과 유지보수에 용이하다.
객체의 사용자( 클라이언트 )는 대상의 역할( 인터페이스 )만 알면 된다.
클라이언트는 실제 객체를 구현하는 구현부를 몰라도 메서드를 통해서 사용할 수 있다.
클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
클라이언트는 구현 대상 자체를 변경(상속된 인터페이스로 변경)해도 영향을 받지 않는다.

한계

인터페이스가 변하면, 클라이언트에 큰 변경이 발생한다.
→ 인터페이스를 안정적으로 잘 설계해야 한다.

OOP의 4가지 특징

추상화

객체들의 공통적인 특징을 도출하여 변수와 메서드를 통해 표현하는 것.

캡슐화

하나의 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 묶는 것.
실제로 구현되는 부분을 외부에 드러나지 않도록 은닉할 수 있다.
외부와의 상호작용은 데이터가 아닌, 기능(메서드)으로 한다.

상속

하나의 객체를 다른 객체에게 물려주는 것.
기존 코드를 재활용하여 중복을 없애고 특징을 물려주는 것이 가능하다.

다형성

역할(인터페이스)과 구현(클래스)을 분리하는 것.
인터페이스를 구현한 객체 인스턴스를 실행 시점에 변경할 수 있다. (동적 바인딩)
오버로딩

  • 동일한 이름의 메서드를 여러개 정의하는 것.
  • 비슷한 역할을 하지만 세부적으로는 다른 메서드를 제공함에 목적이 있다.

오버라이딩

  • 부모 객체에게 상속을 받은 자식 객체에서 메소드를 재정의하는 것.
  • 동일한 명령의 해석을 연결된 객체에 의존함에 목적이 있다.

SOLID 원칙

객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙이다.
이 원칙을 준수한 프로그램은 시간이 지나도 유지 보수와 확장이 쉽다.

SRP: 단일 책임 원칙

Single Responsibility Principle

하나의 클래스는 하나의 책임만 가져야 한다.
변경이 있을때 파급 효과( 다른 객체의 변경 )가 적어야 한다.
→ UI 변경, 객체의 생성과 사용을 분리

OCP: 개방-폐쇄 원칙

Open-Closed Principle

확장에는 열려 있으나, 수정에는 닫혀 있어야 한다.
인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현한다.

LSP: 리스코브 치환 원칙

Liskov Substitution Principle

부모 인터페이스를 자식 인터페이스로 바꾸더라도 정상 작동해야 한다.
자식 인터페이스는 인터페이스 규약을 다 지키면서 개발해야 한다.

ISP: 인터페이스 분리 원칙

Interface Segregation Principle

여러 클라이언트를 위한 범용 인터페이스보다 하나의 클라이언트만을 위한 특별한 인터페이스가 더 낫다.
인터페이스가 명확해지고, 대체 가능성이 높아진다.
예) 자동차 인터페이스 → 운전 인터페이스, 정비 인터페이스로 분리

DIP: 의존관계 역전 원칙

Dependency Inversion Principle

구현체가 아닌 인터페이스에 의존해야 한다.
의존성 주입(DI)은 이 원칙을 따르는 방법 중 하나 이다.

대표적인 문제 상황

  • MemberRepository m = new MemoryMemberRepository();
  • MemberRepository m = new JdbcMemberRepository();
  • 위에서 아래로 변경을 하기 위해서는 클라이언트의 코드를 변경해야 한다.
  • 분명 다형성을 사용했지만 OCP, DIP 원칙이 깨졌다.
  • 이를 해결하기 위해선 별도의 조립, 설정자가 필요하다. → Spring DI Container
profile
백엔드 개발자 지망생

0개의 댓글