분류 전체보기
-
(스프링 기본) 17 - 컴포넌트 스캔개발/Spring 2024. 10. 24. 16:52
스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공한다.의존관계도 자동으로 주입하는 @Autowired 기능도 제공한다. 컴포넌트 스캔은 스프링빈으로 자동으로 끌어올려 주는 것이다. 이걸 하는게 @ComponentScan 어노테이션이다. @ComponentScan 어노테이션은 @Component 가 붙은 어노테이션을 자동으로 스프링 빈으로 등록해준다. @Configuration@ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) excludeFilters : 컴포넌트 스캔 중 뺄 것 고르기여기서는 Con..
-
(스프링 기본) 16 - @Configuration과 싱글톤 (바이트코드 조작)개발/Spring 2024. 10. 24. 13:47
//@Configuration@Configurationpublic class AppConfig { //@Bean memberService -> MemoryMemberRepository() //@Bean orderService -> MemoryMemberRepository() @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public ..
-
(스프링 기본) 15 - 싱글톤 방식의 주의점 (공유필드)개발/Spring 2024. 10. 24. 11:21
싱글톤 객체는 여러 클라이언트가 하나의 객체 인스턴스를 공유하기 때문에객체는 상태를 유지(stateful)하게 설계하면 안되고 무상태(stateless)로 설계해야 한다. - 특정 클라이언트에 의존적인 필드가 있으면 안됨.- 특정 클라이언트가 값을 변경하는 필드가 있으면 안됨.- 가급적 읽기만 가능해야 함- 필드 대신에 자바에서 공유되지 않는 지역변수, 파라미터, ThreadLocal 등을 사용해야 - 스프링 빈의 필드에 공유값을 설정하면 큰 장애 발생할 수 있음. (주의!!★) class StateFulServiceTest { @Test void statefulServiceSingleton() { ApplicationContext ac = new AnnotationConfigAp..
-
(스프링 기본) 14 - 싱글톤 컨테이너개발/Spring 2024. 10. 24. 10:45
스프링 컨테이너는 싱글톤 패턴의 문제점 해결하면서 객체 인스턴스를 싱글톤(1개만 생성)으로 관리한다.우리가 학습한 스프링 빈이 바로 싱글톤으로 관리되는 빈이다. ■ 싱글톤 컨테이너- 싱글턴 패턴 적용하지 않아도 객체 인스턴스 싱글톤으로 관리- 스프링 컨테이너가 그 역할을 하는데, 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스토리라 한다.- 지저분한 코드 들어가지 않아도 된다.- DIP, OCP, 테스트, private 생성자로부터 자유롭다 @Test @DisplayName("스프링 컨테이너와 싱글톤") void springContainer() {// AppConfig appConfig = new AppConfig(); ApplicationContext a..
-
(스프링 기본) 13 - 싱글톤 패턴개발/Spring 2024. 10. 23. 16:59
싱글톤 패턴이란 클래스 인스턴스가 딱 1개만 생성되는 것을 보장하는 패턴이다.package hello.core.singleton;public class SingletonService { //자기 자신을 내부 private 으로 //static 으로 만들어 하나만 존재함 private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance() { return instance; }} static 으로 생성하여 하나만 존재하게 만들고 static 메서드를 통해 불러본다.이렇게 되면 자바가 뜰 때 new SingletonService()..
-
(김영한의 자바 기본) 6 - static개발/Java 2024. 10. 23. 16:59
public class Data3 { public String name; public static int count; //static public Data3(String name) { this.name = name; count++; }} - static 은 주로 멤버변수와 메서드에 사용한다.- static 키워드를 사용하면 공용으로 사용하는 변수를 만들 수 있다. - 멤버 변수에 static 붙이면 static 변수, 정적 변수, 클래스 변수라 한다.- static 이 붙은 정적 변수에 접근하려면 Data3.count 와 같이 클래스명 + .(dot) + 변수명 으로 접근하면 된다.※ Data3 생성자와 같이 자신의 클래스에 있는 정적 변수라면 클래스명 생략..
-
(김영한의 자바 기본) 5 - 자바 메모리 구조 (메서드, stack, heap)개발/Java 2024. 10. 23. 16:10
■ 자바 메모리 구조 (메서드, 스택, 힙) 1. 메서드 영역 : 클래스 정보 보관2. 스택 영역 : 실제 프로그램 실행되는 영역으로, 메서드 실행할 때마다 하나씩 쌓임 3. 힙 영역 : 객체(인스턴스) 생성 영역. new 명령어 사용 시 해당 영역 사용 1. 메서드 영역: 실행에 필요한 공통 데이터 관리. 프로그램의 모든 영역에서 공유한다. - 클래스 정보 : 클래스 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드 등 모든 실행 코드 존재- static : static 변수 보관- 런타임 상수 풀 : 공통 리터럴 상수 보관※ 문자열 풀은 자바 7 부터 힙 영역으로 이동함. 2. 스택 영역(함수의 호출): 자바 실행 시, 하나의 실행 스택 생성된다.각 스택 프레임은 지역 변수, 중간 연산 결과..
-
(김영한의 자바 기본) 4 - 접근 제어자 (private, default, protected, public)개발/Java 2024. 10. 23. 15:21
■ 접근 제어자 4가지1. private : 모든 외부 호출 막기2. default(package-private) : 같은 패키지 안에서 호출 허용3. protected : 같은 패키지 안 호출 허용 + 패키지 달라도 상속 관계 호출 허용4. public : 모든 외부 호출 허용 ■ 허용 단계 (낮 -> 높)private -> default -> protected -> public ■ 접근 제어자 사용 위치필드, 메서드, 생성자※ 클래스 레벨에도 일부 접근 제어자 사용 가능하다. ■ 클래스 레벨 접근 제어자- 클래스 레벨에는 public, default 만 사용 가능- public 클래스는 반드시 파일명과 이름이 같아야 한다.- 하나의 자바 파일에 public 클래스는 하나만 등장 가능- 하나의 자바 파..