SOLID란? 로버트 마틴이 2000년대 초반에 이름붙인 객체 지향 프로그래밍/설계의 5가지 기본 원칙의 앞글자를 딴 약어 SOLID 객체지향의 4대 원칙 - 캡슐화, 상속, 추상화, 다형성 다형성 - 똑같은 클라이언트 코드로 안에 들어있는 존재에 따라 다른 동작이 수행되는 것 단일 책임 원칙 (Single responsibility principle, SRP) 하나의 클래스는 하나의 책임만을 가져야 한다. 하나의 클래스가 여러개의 책임을 가진다면, 그 클래스의 코드가 변경되어야할 이유가 여러개가 생긴 것이다. 단일 책임 원칙을 지키는 코드는 각각의 클래스가 응집력이 높기 때문에, 코드의 재사용성이 높아지고, 캡슐화를 통해 한 클래스의 변경이 다른 클래스에 영향을 미치지 않도록 만든다. 개방-폐쇄 원칙 ..
의존? 의존성? 의존, 의존성 -> Dependency 의존(성) 주입 -> Dependency Injection 의존(관계) 역전 -> Dependency Inversion 스프링 프레임워크가 해주는 일 -> 스프링 빈에서 @Component 들을 갖고있으며, 컴포넌트의 생성자에서 의존성 주입을 해준다. -> 프로젝트 코드는 밑에서 설명한다. 실행 시점에 어떻게 다른 빈을 주입시켜줄까? @SpringBootApplication public class ChangeRepositoryMain { public static void main(String[] args) { SpringApplication.run(ChangeRepositoryMain.class, args); } } @RestController pu..
의존 주입 패턴이란? public interface Repository { void someMethod(String articleContent); } public class DatabaseRepository implements Repository { @Override public void someMethod(String articleContent) {} } public class FileRepository implements Repository { @Override public void someMethod(String articleContent) {} } @Component public class Service { private Repository repository; public void createA..
의존 역전이란 무엇인가? 고수준 컴포넌트가 저수준 컴포넌트에 의존하지 않도록 의존 관계를 역전시키는 것 컴포넌트는 클래스를 의미 인터페이스로 의존 방향이 모이도록 하는 것 고수준 컴포넌트와 저수준 컴포넌트 의존 방향 -> 게시글 작성 Controller -> Service -> Repository Service -> Repository 에서는 클라이언트가 요청한 게시글이 DB 에 저장되도록 요쳥 게시글 조회 Controller -> Service -> Repository Service -> Repository 에서는 클라이언트가 요청한 게시글을 DB 에서 조회 현재 구조에서는 어떤 문제점이 있을까? -> Service 에서 상황에 따라 필요한 Repository 를 바꿔야할 때, Service 의 코드를..
의존이란 무엇인가? A 는 B 에 의존적이다. A 는 B 의 변화에 민감하게 반응한다. B 는 A 의 변화에 민감하게 반응한다고 할 수 없다. 물건의 가격은 공급에 의존적이다. 물건의 가격은 공급에 민감하게 반응한다. 공급은 물건의 가격의 변화에 민감하게 반응한다고 할 수 없다. 클래스끼리 의존 관계 맺기 public class RealMessageSender { public void send() { // 실제로 메시지 보내기 } } public class FakeMessageSender { public void send() { // 메시지는 안보내고 메시지를 보냈다는 로그만 찍기 } } // Client 는 FakeMessageSender 에 의존 public class Client { public v..