본문 바로가기

Learning-log126

(스프링 핵심 원리 - 기본편) 5-(1)웹 어플리케이션과 싱글톤 ,(2) 싱글톤 패턴, (3) 싱글톤 컨테이너 (4) 싱글톤 방식의 주의점 - 웹 어플리케이션과 싱글톤 대부분의 스프링 애플리케이션은 웹 어플리케이션. ( 웹 아닌 것도 개발 가능) 웹 어플리케이션은 여러 고객이 동시에 요청 우리가 만든 memberService를 모든 고객마다 new로 객체 생성 계속 요청이 올 때마다 객체를 매번 만들어야 하는 것. 메모리 낭비 심함. => 해결책 : 싱글톤패턴 - 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되도록 하는 디자인 패턴 객체 인스턴스를 2개 이상 생성하지 못하도록 해야 함. private생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 함. 싱글턴패턴 설정 방법 static 영역에 instance 미리 하나 생성해서 올려두기 이 객체가 필요하면 오직 getInstance() 메서드를 통해서만 조회 가능.. 2023. 4. 3.
(스프링 핵심 원리 - 기본편)스프링 빈 조회- 4-(7)다양한 설정형식 지원 - 자바코드, XML, (8)스프링 빈설정 메타 정보 - BeanDefinition - 다양한 설정형식 지원 - 자바코드, XML 스프링 컨테이너는 자바코드, XML, Groovy 등등 다양한 형식의 설정정보 받아드릴 수 있음 XML 설정 사용 최근에는 많이 사용 X 하지만 아직 많은 레거시 프로젝트들이 XML로 되어있으며 XML을 사용하면 컴파일 없이 설정 정보 변경 가능한 장점도 있음 GenericXmlApplicationContext 사용 - 스프링 빈설정 메타 정보 - BeanDefinition 스프링이 다양한 설정 형식을 지원하는 것은 역할과 구현을 개념적으로 나누어 추상화를 했기 때문에 가능한 것. XML을 읽어서 BeanDefinition, 자바코드를 읽어서 BeanDefinition만 만들면 되기 때문 BeanDefinition : 빈 설정 메타정보 이 메타정보를 기반으로.. 2023. 4. 3.
(스프링 핵심 원리 - 기본편)스프링 빈 조회- 4-(4)동일한 타입이 둘 이상, (5)상속관계, (6) BeanFactory와 ApplicationContext - 스프링 빈 조회- 동일한 타입이 둘 이상 타입으로 조회 시 같은 타입의 스프링 빈이 둘 이상이면 오류가 발생하므로 이 때는 빈 이름을 지정해줘야 함 같은 타입이 둘 이상 있을 때, getBean()을 하면 위와 같은 오류가 발생 - 상속관계 빈을 조회할 때, 상속관계로 되어있다면 ? 부모 타입으로 조회하면 자식 타입도 함께 조회됨 자바 모든 객체의 최고 부모인 Object타입으로 조회하면 모든 스프링 빈을 조회하게 됨. package hello.core.beanfind; import hello.core.AppConfig; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.. 2023. 4. 2.
(스프링 핵심 원리 - 기본편) 4-(1)스프링 컨테이너 생성, (2)컨테이너에 등록된 모든 빈 조회, (3) 스프링 빈 조회-기본 - 스프링 컨테이너 생성 ApplicationContext를 스프링 컨테이너라 함 ApplicationContext는 인터페이스 => 다형성 적용 가능 //스프링 컨테이너 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 구현한 것 중의 하나가 AnnotationConfigApplicationContext임. 스프링컨테이너는 XML기반으로도, 에노테이션 기반의 자바 설정 클래스로도 만들 수 있음( 요즘엔 에노테이션 위주) 스프링 컨테이너를 부를 때, 'BeanFactory', 'ApplicationContext'로 구분해서 말함. 다만, 'Bean.. 2023. 4. 1.
(스프링 핵심 원리 - 기본편) 3-(7)좋은 객체 지향 설계의 5가지 원칙 적용, (8)IoC, DI, 그리고 컨테이너, (9) 스프링으로 전환하기 - 좋은 객체 지향 설계의 5가지 원칙 적용 어떻게 적용됐는지 알아보자 SRP : 한 클래스는 하나의 책임만 가져야 한다 클라이언트 객체는 기존에 직접 구현 객체를 생성, 연결, 실행하는 책임을 모두 가지고 있었음 SRP 단일 책임 원칙을 따를 수 있도록 관심사를 분리함 구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당하도록 함 => 클라이언트 객체는 실행하는 책임만 담당하게 됨. DIP 의존관계 역전 원칙 : 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나. 새로운 할인 정책을 적용하려면 클라이언트도 함께 변경해야 했음. 기존 클라이언트 코드(OrderServiceImpl)는 DiscountPolicy 추상화 인터페이스에만 의존하는 .. 2023. 4. 1.
패키지, import, 캡슐화, 접근제한자, 접근자, 설정자, static, JVM 메모리 구조 (Java) 접근 제한자접근제한을 할 때 패키지로도 접근제한 가능 패키지프로그램의 많은 클래스를 관리하기 위해 패키지 이용(컴퓨터의 폴더와 비슷)패키지는 클래스와 관련있는 인터페이스를 모아두기 위한 이름 공간(Name Space)패키지 구분은 .(dot) 연산자 이용 (컴퓨터에서 하위폴더 나타낼 때 \쓰는 것과 유사)패키지 이름은 시중에 나와 있는 패키지들과 구분되게 지어야함why ? 수백만개의 회사의 수많은 프로젝트들의 클래스 이름이 중복될 수 있기 때문에 패키지로 구분일반적으로 도메인.프로젝트이름.모듈이름ex. com.ssafy.project_이름.module_이름일반적으로 소속이나 회사의 도메인 사용중첩 가능(마치 컴퓨터의 하위폴더가 있듯이!)ex. List 사용 시 java.awt 안에 들어가 있는 것과 ja.. 2023. 4. 1.