WEB (79) 썸네일형 리스트형 컴포넌트 스캔 Filter 필터 사용법 @MyIncludeComponent public class BeanA { } @MyExcludeComponent public class BeanB { } @Configuration @ComponentScan( includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = MyIncludeComponent.class), excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class) ) includeFilters: 컴포넌트 스캔에서 추가할 대상을 지정 excludeFilters: 컴포넌트 스캔에서.. Singleton 디자인패턴의 생성 패턴 중 하나, 오직 1 개의 객체 인스턴스를 생성하는 패턴 public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } *public, private 잘 구분 getInstance()를 사용하여 객체를 불러올 수 있음 스프링 빈 조회하기 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(빈등록클래스명.class); 스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법 1. ac. getBean(빈 이름, 타입) 2. ac.getBean(타입) 만약 조회 대상 스프링 빈이 없으면 발생하는 예외 - NoSuchBeanDefinitionException 조회되는 타입이 둘 이상일 때 발생하는 예외 - NoUniqueBeanDefinitionException -> 이름으로 조회, 특정타입을 모두 조회 스프링 빈의 상속 관계 부모 타입으로 조회하면 자식도 함께 조회됨 -> Object로 하면 모든 스프링 빈 조회 객체 지향 5가지 원칙(SOLID) 1. Single Responsibility Principle(=단일 책임 원칙) 하나의 클래스는 하나의 책임만 가진다 클래스 수정을 했을 때 파급 효과가 적으면 SRP가 잘 지켜진 것 2. Open Closed Principle(=개방폐쇄 원칙) 확장은 열고 수정에 닫는다 객체지향의 다형성을 활용해서 인터페이스를 새로운 클래스로 새로운 기능 구현 사용영역과 구성영역을 나누는 것 3. Liskov Substitution Principle(= 리스코프 취환 법칙) 컴파일의 성공여부를 떠나 인터페이스의 규약은 하위클래스들을 지키는 것 4. Interface Segregation Principle(=인터페이스 분리 원칙) 범용적인 인터페이스 보다 특정 역할을 나누어 인터페이스를 만드는 것이 좋다. 5. Dep.. OCP(Open-Closed Principle) 개방 패쇄 원칙(OCP) 소프트웨어 개체는 확장에 대해 열려 있어야 하고 수정에 대해서는 닫혀 있어야 한다 다형성과 확장을 가능케 하는 객체지향의 장점을 극대화하는 설계 원칙 확장에 열려있다 > 새로운 변경 사항이 발생 했을 때 유연하게 코드를 추가함 변경에 닫혀있다 > 객체()의 직접적인 수정을 제한 잘알려진 예시 JDBC - DB를 바꾸고 싶을때 connection 부분 교체 DIP 설계 기반이 됨 도움이 된 글 https://inpa.tistory.com/entry/OOP-%F0%9F%92%A0-%EC%95%84%EC%A3%BC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-OCP-%EA%B0%9C%EB%B0%A9-%ED%8F%90%EC%87%8.. AOP(Aspect Oriented Programming) AOP는 공통 관심사항과 핵심 관심사항을 분리하여 프로젝트를 원활하게 만들어줌 만약 프로젝트의 모든 메서드 호출 시간이 궁금하다면 각 메서드마다 시간 측정하는 로직을 추가해야한다 하지만 한 로직만 변경해서 모든 메서드에 적용할 수 있도록 도와주는게 aop @Component 등록하고 @Aspect 등록하고 @Around("execution(* 패키지 경로..*(..))") JPA로 DB(h2) 사용하기 1. build.gradle 파일에 jpa, h2 라이브러리 추가 추가하면 옆에 코끼리 버튼이 뜨는데 꼭 클릭해줘야한다 2. 스프링 부트에 JPA 설정 추가 맨 밑줄에 none인 이유는 미리 테이블을 생성해뒀기 때문! create으로 바꾸면 테이블을 직접 생성해줌 3. 엔티티 맵핑 Entity는? 데이터의 집합이다 위 처럼 member 테이블이 있으니 만들어놓은 Member class에 가서 엔티티 맵팽을 한다 @Entity @Id @ GenerateValue, GenerationType 모두jakarta.persistence로 임포트 plz 궁금한게 많은데 JPA를 제대로 안다뤄봐서 .. ㅠ 검색해보니 private Long id 위에 어노테이션은 기본키라서 저렇게 설정해놓은 것 같다 4. JPA 회원.. h2 설치 1. h2 설치 자신의 스프링버전과 맞는 버전을 설치해야함 https://www.h2database.com/html/download-archive.html Archive Downloads www.h2database.com 2. 실행(윈도우) 홈디렉토리에 test.mv 파일이 생기면 성공! 스프링 빈 등록 방법 2가지 1. 컴포넌트 스캔과 자동의존관계 설정 스프링 빈을 Controller -> Service -> repository 관계로 등록하려고 함 @Controller , @Service, @Repository는 스프링 컨테이너가 찾을 수 있게 컴포넌트를 등록하기 위한 어노테이션 @Component로 작성해도 됨. 위 사진을 보면 @Repository는 @Component를 가지고 있는 것을 알 수 있음 나머지도 동일 @AutoWired는 스프링 빈의 연관관계를 나타냄 생성자에 @AutoWired 표시를 하면 객체 생성할 때 해당 스프링 빈을 찾아서 주입할 수 있음! 컴포넌트의 스캔범위는 기본적으로는 메인 클래스가 있는 패키지에서 가능 2. 자바 코드로 직접 스프링 빈 등록 Controller는 위와 동일하게 @.. 예외처리 하나씩 습득할때마다 추가 예정 IllegalStateException - 객체 상태가 메서드 호출에 적절하지 않을때 이전 1 ··· 3 4 5 6 7 8 다음