2024/10 11

12. 빈 스코프

빈스코프란?- 빈이 존재할 수 있는 범위 스코프 종류싱글톤 : 기본 스코프로 스프링 컨테이너가 시작하고 종료까지 유지되는 가장 넓은 범위의 스코프프로토타입 : 스프링컨테이너가 프로토타입 빈의 생성과 의존관계 주입 까지만 관여하고 이후는 관리하지 않는 범위 스코프 웹관련 스코프 참고 - request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 (고객 reponse요청에 사용) - sesstion : 웹 세션이 생성되고 종료될때 까지 유지되는 스코프 (로그인에 많이 사용) - application : 웹 서블릿 컨텍스와 같은 범위로 유지되는 스코프 프로토타입 스코프싱글톤 스코프 빈의 경우 조회하면 모두 같은 빈을 반환한다. 반면 프로토 타입 스코프는 항상 새로운 인스턴스를 생성해서 반환한다. 싱글톤..

스프링 2024.10.19

10-2. 다양한 의존관계 주입방법 (애노테이션을 만들기, List Map으로 받기

애노테이션 만들어서 의존관계 주입하기필요이유의존 관계 주입 방식 중 @Qqualifier의 단점을 보면 OrderServiceImpl.java RateDiscountPolicy.java- 해당 하는 Qualifier안에 들어가는 문자는 타입으로 조회하기 때문에 오타가 날 수 있다. 즉 아래와 같이 오타가 날수 있는데 실행시 이름이 일치 하지않아 UnsatisfiedDependencyException에러가 나는데 이런 실수는 자주 있을수 있다. 만들어보기MainDiscountPolicy.java- 클래스에 있는 애노테이션은 Qqualifier.java파일에 그대로 가져왔다.- @Qualifier 부분은 추가한 것인데 해당 애노테이션을 쓰면 해당 부분이 적용된다. 적용OrderServiceImpl.java ..

스프링 2024.10.19

11. 스프링 빈 생명주기 콜백

객체 초기화 작업의 필요성네트워크 커넥션 풀, 네트워크 소켓 처럼 시작시점에 미리 필요한 연결을 하고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 하려면 객체 초기화 작업이 필요하다. 스프링 빈 콜백 기능- 빈 객체를 생성하고 의존관계가 완료될 때 초기화 시점을 알려주는 초기화 콜백 기능 제공- 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 스프링 빈 life cycle 참고컨테이너 생성 > 스프링 빈생성 > 의존관계 주입 > 초기화 콜백 > 사용 > 소멸전 콜백 > 스프링 종료  초기화  콜백  메서드 사용말고 생성자에 다 설정하면 되지 않을까?- 각각의 역할에 초점을 맞추어 생성과 초기화는 분리하는게 좋다.- 생성자는 필수정보를 받아 메모리 할당해 객체 생성하는 역할 - 초기화는 생..

스프링 2024.10.13

[Java] 컬렉션 List (ArrayList, Vector, LinkedList)

컬렉션이 필요한 이유- Array는 고정된길이를 가지고 있어 선언 이후에 길이 수정이 안되고 중간에 값을 끼워놓기 번거롭다. 예시- 기존 Array에 1~2 사이에 25를 넣고 싶은경우- 1개더 큰 Array생성 > 앞부분(0~1) 복사 > 25넣기 > 뒷부분 복사(2~6)- 배열을 새로 생성해야하고 번거롭다.  컬렉션 (Collections)- 데이터들의 집합- java에서는 여러 데이터 구조들을 제공하여 사용자는 비즈니스 로직에만 집중 할 수 있다.- java제공 : List, Set, Queue, Map List- 컬렉션을 상속 받은 인터페이스- 순서가 있는 집합- 어디에 자료가 삽입되는지 정밀하게 제어 가능- 중복요소 허용, 위치값 접근 가능 - 일반 리스트 선언  List타입 안전성- 리스트는 ..

자바 2024.10.11

[Java] 추상 클래스와 인터페이스 (Abstract class, Imterface)

추상클래스- 높은 단계의 알고리즘을 적용한 클래스로 세부 정보는 상속 받은 클래스에 정의한다.- 구현할 대상이 정형화된 필수적인단계를 가질 경우 기본 알고리즘을 정의하는 역할을 한다.- 인스턴스를 직접만들수 없는 클래스로 해당 클래스를 상속받아 상세 내용을 만든다. 선언예시 AbstractCar.java- go, stop메소드를 만들었지만 구성 내용을 제공하지는 않음- 해당 메소드의 상세화는 상속받은 자식 클래스가 필수적으로 해야 한다. 구성하기- 상속 받은 클래스를 선언 하면 바로 추상메소드를 오버라이드 하도록 에러가 뜬다.  ElectricCar.java- 위와같이 상속 받은 클래스로 메소드를 구체화 한다. 특징 - 아래와 같이 추상 메소드 뿐만 아니라 일반 변수, 메서드도 사용가능 인터페이스- 공통..

자바 2024.10.10

10. 다양한 의존관계 주입방법

의존관계 주입 방법1. 생성자 주입 - 생성자를 통한 의존관계 주입방법 (빈이 생성될때 의존관계 설정됨) - 특징: 1번만 호출되도록 보장된다 -> 불변(1번만 호출할수 있어 변경이 없음) , 필수 의존관계에 사용 - 생성자 가 1개만 있으면 @Autowired 생략 가능하다. 2. 수정자 주입 (setter 주입) - setter 메서드를 통한 의존관계 주입 (빈생성 수 의존관계 주입할때 설정됨) - 특징 : 선택, 변경의 가능성이 있는 의존관계에 사용한다. 3. 필드 주입 - 객체 필드에 바로 주입하는 방식 - 외부에서 변경이 불가능(private라서)해서 테스트 하기 힘들다. (순수한 Java로 테스트 코드를 짜려면 setter메서드가 있어야함)  - 애플리케이션과 관계없는 테스트 코드나 @Conf..

스프링 2024.10.07

9. 컴포넌트 스캔과 의존관계 자동 주입

- 1~8 번까지는 Annotaion으로 AppConfig.java파일을 만들거나 xml파일로 스프링빈, 의존관계를 정리했다.- 스프링은 설정 파일이 없어도 자동으로 빈을 등록하는 컴포넌트 스캔 기능이 있다.- 의존관계 자동주입 기능은 @Autowired 애노테이션을 사용한다 @ComponentScan- 클래스 설정정보에 붙여줌, @Bean으로 클래스 등록 안함- @Component 애노테이션이 붙은 클래스 모두 스프링빈으로 등록해줌 -> 빈이름은 맨 앞글자만 소문자로 넣어 사용한다. - @Configuration 애노테이션이 붙은것도 대상이 되는데 아래 소스 코드를 보면 @Component가 있음 빈등록 그림 @Autowired- 사용할 빈에 @Component 붙였다면 해당 빈의 의존관계 주입을 해야..

스프링 2024.10.05

[Java] 상속 (Inheritance)

상속- 동일한 속성(변수), 메소드를 한데 묶어서 부모 클래스로 만들어 자식 클래스에 그대로 상속 하는 것- 중복되는 속성, 메소드가 있는 클래스들을 소스 복사 없이 상속으로 사용할 수 있다. -> 확장성이 좋다.-  속성, 변수의 수정이 있을 때 부모클래스만 수정하여 상속받은 클래스들을 수정할 필요가 없다.- 사용 : class 자식 extends 부모 {}  예시Person.java- 공통적으로 가지고 있는 설정 Student.java-People클래스에 있는 변수, 메서드를 받아 Student클래스를 만들었다. -> People클래스 확장- printName()에서 부모변수를 사용할때 super.변수명을 사용한다. Object (최상위 상속 클래스)- 모든 클래스의 부모 클래스로 다른 클래스를 상속..

자바 2024.10.04

[Java] Array 와 ArrayList

Array(배열)- 동일한 타입의 값을 묶어서 저장할 수  있는 저장소- 생성 : 타입[] 변수명- 요소 접근 : 변수명[index]- index(주소) : 처음값은 0으로 시작해서 1씩 증가한다. 생성예시- int형 배열의경우 값을 지정하지 않으면 디폴트 값이 0임 (double은 0.0, boolean은 false, 객체는 null) index를 초과하는 범위를 부르면?- ArrayIndexOutOfBoundsException 에러 발생 관련 메소드1) length : 배열 항목의 갯수 리턴 2) Array.toString(변수) : 배열 항목 string으로 보기  배열은 주로 enhanced for문과 함께 사용-위 두개 for문은 같은 내용으로 아래 for문은 c배열의 값을 처음부터 마지막 요소..

자바 2024.10.04

[Java] Date 타입 (LocalDate, LocalDateTime, LocalTime)

Date Type- 날짜를 쉽게 다룰수 있는 타입- java 8에서 새롭게 도입된 날짜 데이터 타입을 볼예정 -> LocalDate, LocalDateTime, LocalTime- 불변성을 가짐 1. LocalDate- 날짜 값 가짐- 관련 메소드 : getYear(), getDayOfMonth(), getDayOfYear(), [윤년확인]isLeapYear(), plusDays(), minusDays()- package : java.time.LocalDate- 생성메서드 : LocalDate.now() -> 오늘날짜, LocalDate.of(2024,10,3) -> 특정날짜 2. LocalDateTime- 날짜, 시간 모두 가짐- 관련 메소드 : plusDays(), plusHours()...- pa..

자바 2024.10.02