TIL

조지성·2022년 3월 22일
0

TIL

목록 보기
47/78
post-thumbnail

2021.03.22

  • 스프링 183 ~
  • 디지털 논리회로

객체 지향 설계 5원칙 - SOLID

OCP - 개방 폐쇄 원칙

  • 자신의 확장에는 열려 있고 주변의 변화에 대해서는 닫혀 있어야한다.
  • 개방 폐쇄 원칙을 지키면 유연성,재사용성,유지보수성 등을 얻을 수 있다.
  • 개방 폐쇄 원칙을 지키지 않은경우

  • 개방 폐쇄 원칙을 지킨 경우

LSP - 리스코프 치환 원칙

  • 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역활을 하는 데 문제가 없어야한다.
    • 하위 클래스 is a kind 상위 클래스 - 하위 클래스는 상위 클래스의 한 종류이다.
    • 구현 클래스 is able to 인터페이스 - 구현 클래스는 인터페이스 할 수 있다.
  • 리스코프 치환 원칙 위반 사례
  • 리스코프 치환 원칙 적용 사례

ISP - 인터페이스 분리 원칙

  • 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다.
  • 인터페이스를 통해 메서드를 외부에 제공할 때는 최고한의 메서드만 제공
  • 단일 책임 원칙(SRP)과 인터페이스 분할 원칙(ISP)는 같은 문제를 해결

DIP - 의존 역전 원칙

  • 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 것
  • 상위 클래스일수록, 인터페이스일수록,추상 클래스일 수록 변하지 않을 가능성이 높기에 하위 클래스나 구체 클래스가 아닌 상위 클래스,인터페이스, 추상 클래스를 통해 의존하라

스프링 삼각형과 설정 정보

  • 스프링을 이해하는데는 POJO(Plain Old Java Object)를 기반으로 스프링 삼각형이라는 애칭을 가진 IoC/DI , AOP , PSA라고 하는 스프링의 3대 프로그래밍 모델에 대한 이해가 필수

프로그래밍에서 의존성이란?

  • 자바에서의 의존성
    • 운전자가 자동차를 생산한다 -> new Car();
      자동차는 내부적으로 타이어를 생산한다 -> Car 객체 생성자에서 new Tire()
    • 의존성은 new다 , new를 실행하는 Car와 Tire 사이에서 Car가 Tire에 의존한다

따라서 결론

  • 전체가 부분에 의존한다
  • 프로그래밍에서 의존 관계는 new로 표현된다.

의존이 일어나고 있는 두 객체 사이에 직접 의존성을 해결하는 코드

package com.heaven.mvc.expert001_01;

public interface Tire {
	String getBrand();
}
package com.heaven.mvc.expert001_01;

public class KoreaTire implements Tire{

	@Override
	public String getBrand() {
		return "코리아 타이어";
	}
	
}
package com.heaven.mvc.expert001_01;

public class AmericaTire implements Tire{

	@Override
	public String getBrand() {
		return "미국 타이어";
	}

}
package com.heaven.mvc.expert001_01;

public class Car {
	Tire tire;
	
	public Car() {
		tire = new KoreaTire(); //의존 관계 발생!!
		//tire = new AmericaTire();
	}
	
	public String getTireBrand() {
		return "장착된 타이어: "+tire.getBrand();
	}
}
package com.heaven.mvc.expert001_01;

public class Driver {
	public static void main(String[] args) {
		Car car = new Car();
		
		System.out.println(car.getTireBrand());
	}
}
  • 자동차는 타이어에 의존한다.
  • 운전자는 자동차를 사용한다 == 운전자는 자동차에 의존한다
  • 자동차의 생성자 코드에서 tire속성에 새로운 타이어를 생성해서 참조할 수 있게 해주었다.
profile
초보 개발자의 성장기💻

0개의 댓글