객체지향 원칙과 예시..

Developer:Bird·2020년 12월 27일
0

객체지향

목록 보기
1/1

✅ 0.객체지향언어란?

• 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지
를 주고받고, 데이터를 처리할 수 있다. (협력)
• 객체 지향 프로그래밍은 프로그램을 유연하고 변경용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다

✅ 1.객체지향원칙 5가지

▶ SRP: Single Responsiblity Principle(단일 책임 원칙)

한 클래스는 하나의 책임(기능)만 가져야한다.
중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것

▶ OCP: Open-Closed Principle) (개방-패쇄 원칙)

변화에 닫혀있고 확장에 열려있어야한다.

▶ LSP: Liskov Substitution Principle (리스코프 치환 원칙)

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다

▶ DIP: Dependency Inversion Principle (의존 역전 원칙)

추상화에 의존해야지, 구체화에 의존하면 안된다.

▶ ISP: Interface Segregation Principle (인터페이스 분리 원칙)

✔특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다

✅ 2. 과거의 객체 지향프로그래밍 예시


public interface Car{void move()}; //차 인터페이스
public class 포르쉐 implements Car; //차구현체
public class 페라리 implements Car; //차구현체
public class Driver {
	private Car car=new 포르쉐();
  	// private Car car=new 페라리();
       public void Drive(Car.move();)
       .
       .
}

👉이를 보고 객체지향 원리5가지가 잘지켜 졌는지 보자.

❌SRP: Driver객체내에서 car의 생성까지 책임지고 있다.
🔺OCP: Car를 페라리로 바꾸고싶을때 다형성을 이용하여 쉽게 변경이 가능하다. 하지만 Driver클래스 내부에서 변경해야한다.
🟢LSP:기존Java가 가지고있는 캡슐화,다형성이 지원 하는기능이다.
🟢ISP: 인터페이스를 여러개로 나눔으로써 해당사항을 지키고 있다.
❌DIP: 현재 Driver객체는 언뜻 Car인터페이스를 사용함 으로써 DIP원칙이 지켜지고 있는것으로 보인다. 하지만 Class내부에서 구현체를 가지고 있음으로써 지켜지고 있지않다.

✅ 3. 현재방식의 객체지향 프로그래밍

public class Driver {

       private Car car;
       public Driver(Car car){
       this.car=car;
       }
       public void Drive(Car.move();)
       .
       .
}
public AppConfig{
public Driver driver() {new Driver(porsche());}
public 포르쉐 porsche () {return 포르쉐();}
}

public void main(){
Driver driver=AppConfig.driver();
}

👉이를 보고 전의 코드와 다른점을 살펴보자.

🟢SRP: Driver입장에서 Car에 대해서는 전혀 신경쓰고 있지않다. AppConfig에서 전부 관리해준다.
🟢OCP: 내부에 있는 코드는 포르쉐를쓰든 페라리를쓰든 전혀변하지 않는다. 인터페이스만 만들어서 AppConfig에서 주입시켜주면 되기에 확장은 유연하다.
🟢DIP: Driver객체는 이제 더이상 구현체에 신경쓰지 않는다. 인터페이스에 의존하고 있다.

✅ 4.정리

AppConfig를 통해서 관심사를 확실하게 분리했다. 배역, 배우를 생각해보자. AppConfig는 공연 기획자다. AppConfig는 구체 클래스를 선택한다. 배역에 맞는 담당 배우를 선택한다. 애플리케이션이 어떻게 동작해야 할지 전체 구성을 책임진다. 이제 각 배우들은 담당 기능을 실행하는 책임만 지면 된다.

👌참고자료:인프런 스프링 핵심원리(김영한)

profile
끈임없이 발전하자.

0개의 댓글