본문 바로가기

전체 글147

[Spring] 의존성 주입 3가지 방법(생성자 주입을 사용하자) 공부한 내용으로는 다음과 같다. 결론, 생성자 주입 방식을 사용하자. 의존성을 주입하는 방법으로 3가지가 있다. 1. 생성자 주입 2. 필드 주입(@Autowired 3. 수정자 주입(setter) 생성자 주입이 주는 장점 순환참조를 방지할 수 있다. 컴포넌트 간 의존성이 생긴다. A가 B를 참조, B가 A를 참조하는 경우 실행시 서로가 계속 호출될 수 있다. 하지만, 생성자 주입을 할 경우, 코드 실행 전 오류를 발견하여 사전에 알 수 있다(BeanCurrentlyInCreationException). 생성자 주입은 필드주입, 수정자 주입과 다르게 빈을 주입하는 순서가 다르다. 수정자 주입같은 경우, 받으려는 빈 생성자를 호출하여 빈을 찾거나 팩터리에 등록한 후 찾는다. 테스트 코드 작성이 편리하다. .. 2022. 4. 26.
전략패턴 vs 상태패턴 결론 전략패턴 : 한 번 인스턴스 생성하고 난 뒤, 상태가 거의 바뀌지 않을 때 사용 상태패턴 : 한 번 인스턴스 생성하고 난 뒤, 상태가 빈번하게 바뀔 때 사용 디자인패턴 (소프트웨어) 디자인 + (공통적으로 마주치는 문제를 해결하는 방법의) 패턴 1. 전략패턴 각각의 알고리즘군을 교환이 가능하도록 별도로 정의하고 각 캡슐화한 후 서로 교환해서 사용 구조 장점 코드 중복 방지 확장성 및 알고리즘 변경 용이 예시 오리 종류 (한번 정하면 잘 바뀌지 않음) 날 수 있음 날 수 없음 수영할 수 있음 수영할 수 없음 인터페이스 (해당 예시는 자동차) public interface CarMoveBehavior { public void action(); } 인터페이스 Impl class UpBehavior imp.. 2022. 4. 26.
[Spring](스프링 핵심 원리 - 기본편) 스프링 핵심 원리 이해1 - 예제 만들기 1. 프로젝트 생성 1-1. 사전 준비물 Java 11 설치 IDE: IntelliJ 또는 Eclipse 설치 1-2. 스트링 부트 스타터 사이트 : 스프링 프로젝트 생성 https://start.spring.io 1-3. 프로젝트 선택 Project: Gradle Project Spring Boot: 2.6.x Language: Java Packaging: Jar Java: 11 Group : 그룹명 hello Artifact : 빌드명 core Project Metadata groupId: hello artifactId: core Generate 파일 생성 IntelliJ import - build.gradle 파일 선택 도메인 설계 1-1. 회원 도메인 설계 인터페이스 : 회원 서비스, 회원 저장소.. 2022. 4. 19.
[Spring] SOLID (좋은 객체 지향 설계의 5가지 원칙) SOLID (좋은 객체 지향 설계의 5가지 원칙) 클린코드로 유명한 로버트 마틴이 5가지 원칙을 정리한 것 SRP(single responsibility principle) : 단일 책임 원칙 하나의 클래스는 하나의 책임 OCP(Open/closed principle) : 개방-폐쇄 원칙 확장에는 열려있으나 변경에는 닫힘 LSP(Liskov substitution principle) : 리스코프 치환 원칙 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다. 컴파일 성공해도 확인해야함. EX) 엑셀을 밟으면 뒤로가도록 구현. (잘못됨) ISP(Interface segregation principle) : 인터페이스 분리 원칙 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫.. 2022. 4. 19.
[Spring] 좋은 객체지향 프로그래밍이란? 좋은 객체지향 프로그래밍이란? 1. 객체지향 추상화 캡슐화 상속 다형성 1-1. 다형성의 중요성 역할과 구현으로 세상을 구분! 역할 : 인터페이스 구현 : 클래스 → 인터페이스를 먼저 설계 ! 자동차(역할) : K3, 아반떼, 테슬라(구현) 1-2. 역할과 구현을 분리 단순해지고, 유연해지며, 변경도 편리해진다. 클라이언트는, 인터페이스만 알면 된다. 클라이언트는, 구현 대상의 내부 구조를 몰라도 된다. 클라이언트는, 내부 구조가 변경되어도 영향을 받지 않는다. 클라이언트는, 구현 대상 자체를 변경해도 영향을 받지 않는다. 어떻게? 자바의 ‘다형성’을 활용 인터페이스를 오버라이딩 1-3. 역할과 구현을 분리의 한계 인터페이스 자체가 변하면, 클라이언트, 서버 모두에 큰 변경이 발생한다. 자동차 → 비행기.. 2022. 4. 19.
[Spring] 스프링의 탄생과 개념 스프링 : JAVA 웹 프레임워크. → JAVA기술(JSP, MyBatis, JPA 등 여러가지)들을 편리하기 사용하기 위함. 1. 스프링 역사 2002년 로드존슨 책 출간 : EJB의 문제점 지적 EJB(Enterprise JavaBeans) : 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션 스프링 핵심 개념 책이 유명해지고, 책의 예제 코드를 프로젝트에 사용 유겐 휠러, 얀 카로프가 로드 존슨에게 오픈소스 프로젝트 제안 : J2EE(EJB) 2003년 스프링 프레임워크 1.0 출시 2. 스프링이란? 필수 요소 스프링 프레임워크 : 자주 쓰이는 기능(클래스) 집합 스프링 부트 : 스프링 프레임워크 기술들을 편리하게 사용하도록 도와줌 선택 스프링 데이터 스프링 세션 스프링 시큐리티 스프링 Re.. 2022. 4. 19.