본문 바로가기
레거시

2022.03.05~03.06 의 기록

by GroovyArea 2022. 3. 5.

 하루 

=>  공부 관련

1) 스프링 개구리책 CH5까지 읽고 정리

2) MVC 객체지향 리팩토링 후 피드백

3) 기술 질문 답변 못한 부분 노션에 정리

 

=> 파이널 프로젝트 관련

1) DB ERD 그려놓기 & 스프레드시트 정리

2) git 협업


 문제 정리

1. 상수의 중복과 범람으로 난해한 코드

해결 > enum 클래스 3개를 작성하여 해결

package Enum;

public enum PrintGameResult {
	WIN_RESULT("님이 이겼습니다."),
	DRAW_RESULT("비겼습니다."),
	LOSE_RESULT("컴퓨터가 이겼습니다.");
	
	private final String printGameResult; 
	
	PrintGameResult(String printGameResult) {
		this.printGameResult = printGameResult;
	}
	
	public String getPrintGameResult() {
		return printGameResult;
				
	}
}

=> 3개중 하나인 클래스. 반환 시 String 타입이 아닌 enum 타입 그 자체를 반환하도록 노력해보자

 

2. 모델의 책임 분리

> 사용자, 컴퓨터, 카운트, 게임 모델의 책임을 분리하여 작성

하지만 아직도 멀었다. Model 다운 Model의 특징은 알맞은 속성을 가지고 로직은 Controller나 객체 간의 관계로 구현하자
아직 수정할게 많은 코드들. 예외처리는 enum에서 책임은 책임 답게 / 애매한 코드는 작성하지 말것 /set메서드 없애서 불변성을 지키기 / static 키워드 남발 금지 / enum 생성자 사용 금지 / Model에서 view 의존 금지


 개인 공부

2장 자바와 절차적,구조적 프로그래밍

  • 자바 실행 과정
    1. 사용자가 .java file에 소스코드 작성
    2. JDK(Java Development Kit)안에 javac.exe 컴파일러를 이용하여 .java file(Object file)을 생성
    3. JRE(Java Runtime Environment)안에 java.exe 프로그램 실행기를 이용하여 JVM위에서 실행
    4. JRE는 프로그램 안에 main() 메서드가 존재하는지 확인함, java.lang 패키지를 Static영역에 Load, Class를 Static영역에 Load
    5. Stack영역에 main()메소드를 적재, main()메소드 스택프레임 안에 파라미터 변수인 args스택생성
  • 자바 T메모리 영역
    1. Static : 클래스 영역
    2. Stack : 메소드 영역
    3. Heap : 객체 영역
  • 메소드 블랙박스화 : parameter, return에 의해서만 메소드 사이에 값이 전달될 뿐 서로 내부의 지역 변수를 볼 수 없다는 것을 의미
  • 멀티 스레드(Multi Thread) : T메모리 영역의 Stack영역을 스레드 개수만큼 분할해서 쓰는 것
    • Stack영역만 나누는 것이기 떄문에 Static, Heap영역을 공유하기 떄문에 멀티 프로세스 대비 메모리를 적게 사용
    • 전역변수 문제점 : 스레드 A, 스레드 B가 전역변수를 각자 set하는 부분에서 값이 꼬일 수 있음
  • 멀티 프로세스(Multi Process) : 다수의 T메모리 영역을 가지는 구조
  • 각 프로세스는 각자의 T메모리를 가지고 각 고유의 공간이므로 서로 참조할 수 없음
  • 멀티 스레드에 비해 높은 안정성을 보장, 하지만 많은 메모리를 사용

3장 자바와 객체 지향

  • 클래스 : 분류에 대한 "개념"
  • 객체 : 세상에 존재하는 유일무이한 사물
    • 클래스는 "분류"의 이름으로, 객체는 "유일무이한 사물"의 이름으로 작명해야 함
      1. 조류의 나이는? 조류의 크기는? --> 조류는 "분류"의 개념이기 떄문에 해당질의에 답을 할 수 없으므로 클래스이다.
      2. bird의 나이는? bird의 크기는? --> 같은 이유로 답을 할 수 없으므로 "분류"", 클래스이다.
      ex) 펭귄 뽀로로 = new 펭귄(); < 인스턴스명을 잘 작성한 예시 >
      1. 펭귄의 나이는? 펭귄의 크기는? --> 펭귄은 "분류"의 개념이기 떄문에 해당질의에 답을 할 수 없으므로 클래스이다.
      2. 뽀로로의 나이는? 뽀로로의 크기는? --> 뽀로로라는 유일무이한 사물의 특징이므로, 대답이 가능함
    • ex) 조류 bird = new 조류(); < 인스턴스명을 잘 못 작성한 예시 >

  • 객체지향의 4대 특성
    • 캡슐화 : 접근 제어자 priate, [default], protected, public을 통한 접근 제한
      1. private : 본인만 접근가능
      2. [default] : 같은 패키지 내의 클래스에서 접근 가능
      3. protected : 상속/같은 패키지내의 클래스에서 접근 가능
      4. public : 모두가 접근 가능
      5. 상속을 받지 않았다면 객체 맴버는 객체를 생성한 후 객체 참조 변수를 이용해 접근해야 한다.
      6. 정적 멤버는 클래스명.정적멤버 형식으로 접근하는 것을 권장함ex) 비권장 객체명.정적멤버) 이원기.인구
      7. ex) 권장 클래스명.정적멤버) 사람.인구
    • 상속 : 부모 - 자식 관계보다는, 동물 - 포유류와 같은 구체화, 분류도와 같이 부모의 "확장"의 개념
      1. 상속은 상위 클래스의 특성을 "재사용"하는 것
      2. 상속은 상위 클래스의 특성을 "확장"하는 것
      3. 상속은 is a kind of의 관계를 만족해야 함
        • 하위 클래스는 상위 클래스다. ( ex) 포유류는 동물이다. )
        • 자바는 어째서 다중 상속을 지원하지 않는가? : 두개 이상의 상위 클래스를 상속받은 하위 클래스의 특징 중 상위 클래스의 공통 행위(메소드)가 존재할 떄 하위 클래스는 어떠한 것을 따라야 하는가? 하는 논리적 문제가 발생. 다중 상속으로 인한 득보다 실이 크다고 판단하여 Java에서는 다중상속을 지원하지 않는다.
      4. 인터페이스 란?
        • Java는 다중상속을 지원하지 않지만, 인터페이스를 이용하여 다중상속의 효과를 볼 수 있음
        • 구현 클래스 is able to 인터페이스의 개념 ( 구현 클래스는 인터페이스 "할 수 있다." )
        • 인터페이스는 구현 클래스의 할 수 있는 것의 이름을 "정의"한 것이므로, 작명을 "~할 수 있는"으로 작명하는 것이 좋음
      5. 상속과 T 메모리
        • 하위 클래스의 인스턴스가 생성될 때 상위 클래스의 인스턴스도 함께 생성된다.ex) Animal pingu = new Penguin();
        • ex) Penguin pororo = new Penguin();
    • 추상화 : 구체적인 것을 분해해서 관심 영역(어플리케이션 경계)에 있는 특성만 가지고 재조합 하는 것
      1. 구체적인 Class에는 굉장히 많은 특징과, 행위가 존재하지만, 내가 만들고자하는 영역에서 보면 특징, 행위가 매우 제한적으로 설계가능함
      2. 사용하고자 하는 특징, 행위를 추출하는 것을 "모델링"이라고 함
      3. ex) 사람이라는 구체적 Class는 시력/몸무게/혈액형/키/나이/직업/먹는행위/일하는행위/운동하는행위 등 매우 많은 특징과 행위를 가지지만, 내가 만들고자하는 "은행"어플리케이션에서의 사람은 "고객"으로 한정되며, 나이/직업/일하는행위정도로만 특징과 행위를 추출할 수 있다.
      4. 추상화와 T메모리
      5. ex) Mouse는 이름/나이/신장/체중/종/꼬리갯수/먹는행위/자는행위/무는행위/달리는행위 등 많은 특징/행위를 가지지만 내가 구현할려는 목적의 특징은 이름/나이/꼬리갯수/노래부르는행위 만 필요하면 아래와같이 정의할 수 있음
    • 다형성 : 오버라이딩 / 오버로딩
      1. 오버라이딩(OverRiding) : 같은 메소드 이름/같은 인자 목록/상위 클래스의 메소드 "재정의"
      2. 오버로딩(OverLoading) : 같은 메소드 이름/다른 인자목록/다수의 메소드를 "중복 정의"
      3. 다형성과 T메모리ex) Animal pingu = new Penguin();
      4. ex) Penguin pororo = new Penguin();

  • 혼용하여 사용하는 개념
    • 클래스 맴버 = 정적 맴버 = 스태틱 멤버
    • 객체 멤버 = 오브젝트 멤버 = 인스턴스 멤버
    • 필드 = 속성 = 프로퍼티
    • 함수 = 메서드
    • 변수 공간 = 메모리 공간

4장 자바가 확장한 객체 지향

  • abstract class : 추상클래스로, 추상메소드를 생성 가능, 추상클래스는 인스턴스를 생성할 수 없다.
    • 추상메소드 : 메소드 선언은 있지만, 몸체는 없는 메소드
    • 추상메소드는 상속한 하위Class가 OverRiding하지 않으면 컴파일 시점에 에러가 발생함
  • 생성자(객체 생성자 메소드)
    • 개발자가 아무런 생성자를 만들지 않으면, 자바에서는 기본생성자(파라미터 없는)를 만들어 지원함
    • 인자가 있는 생성자를 하나라도 만든다면, 기본 생성자를 만들어 주지 않는다.
  • static block
    • 클래스가 로딩되고 클래스 변수가 준비된 후 자동으로 실행되는 블록, 주로 클래스 변수를 초기화시키는 코드를 둔다.
    • 한 클래스 안에 여러 개의 static 블록을 넣을 수 있다.
    • 예제
        static String name = "홍길동"; // 변수 선언에 값을 초기화시키는 문장을 포함할 수 있다.
        static {
            System.out.println("static...1");
            name = "임꺽정";
        }
      
      }실행 결과
      • 객체멤버는 클래스가 static영역에 자리 잡은 후, 객체 생성자를 통해 힙에 생성됨
      • 클래스의 static불록이 실행되고 있을 때는 해당 클래스의 객체는 하나도 존재하지 않기 때문에 static블록에서는 객체 맴버 접근 할 수 없음
          static String name = "홍길동"; // 변수 선언에 값을 초기화시키는 문장을 포함할 수 있다.
          static {
              System.out.println("static...1");
              name = "임꺽정";
          }
          static {
              System.out.println("static...2");
              name = "유관순";
          }
        
        }실행 결과
      • main 메서드 시작! static...1 static...2 하하하`
      • public static void main(String[] args) { System.out.println("main 메서드 시작!"); Student.name = "하하하"; System.out.println(Student.name); }
      • `static class Student {
      • 클래스 정보는 해당 클래스가 코드에서 맨 처음 사용될 때 T메모리의 static영역에 로딩되며, 이때 **단 한번 ** 해당 클래스의 static불록이 실행됨
      • 클래스가 제일 처음 사용될 떄는 다음 세가지중 하나임
        1. 클래스의 정적 속성을 사용할 때
        2. 클래스의 정적 메서드를 사용할 때
        3. 클래스의 인스턴스를 최초로 만들 때
    • main 메서드 시작!`
    • public static void main(String[] args) { System.out.println("main 메서드 시작!"); }
    • `static class Student {
  • instanceof 연산자
    • 만들어진 객체가 특정 클래스의 인스턴스인지 확인하는 연산자로 true, false를 반환함if(이원기 instanceof 사람) --> true
    • ex) 사람 이원기 = new 사람()
  • interface
    • interface는 정적 상수(static final)와 추상메소드(public abstract)만 가능함
    • 따로 명시하지 않아도, 정정 상수/추상메소드로 처리하여줌
  • this 키워드
    • 지역 변수와 속성(객체 변수, 정적 변수)의 이름이 같은 경우 지역변수가 우선함
    • 객체 변수와 이름이 같은 지역 변수가 있는 경우 객체 변수를 사용하려면 this를 접두사로 사용함
    • 정적 변수와 이름이 같은 지역 변수가 있는 경우 정적 변수를 사용하려면 클래스명을 접두사로 사용함

 


1. 함수형 프로그래밍이란?

⇒ 선언형 프로그래밍 : 어떻게 할 것인지 보다 무엇을 할 것인지 설명

함수형 프로그래밍 : 순수 함수를 조합하여 소프트웨어를 만드는 방식 & 부수 효과가 없는 순수 함수를 1급 객체로 간주하여 매개변수로 넘기거나 반환값으로 사용하며 참조 투명성을 지킬 수 있다.

  • 순수 함수란?부수효과란
    1. 변수의 값이 변경됨
    2. 자료 구조를 제자리에서 수정함
    3. 객체의 필드값을 설정
    4. 예외나 오류가 발생하여 실행 중단
    5. 콘솔 또는 파일 I/O가 발생함
    ⇒ 함수의 실행이 외부에 영향을 끼치지 않는 함수
  • ⇒ 부수 효과를 제거한 함수
  • 일급 객체란?

⇒ 변수나 데이터 구조 안에 담을 수 있다

⇒ 파라미터로 전달 가능

⇒ 반환 값으로 사용 가능하다

⇒ 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다

참조 투명성이란

  1. 동일한 인자에 대해 동일한 결과 반환
  2. 이를 통해 기존의 값은 변경되지 않고 유지된다

⇒ 함수는 일급객체!

 

 

2. 자바에서는 함수형 프로그래밍을 어떻게 구현할까?

  • Functional Interface

⇒ 1개의 추상 메소드를 갖고 있는 인터페이스

⇒ 함수형 인터페이스를 사용하는 이유는 자바의 람다식은 함수형 인터페이스로만 접근이 되기 때문

  • Runnable
  • Supplier
  • Consumer
  • Function<T, R>
  • Predicate

3. 람다란?

⇒ 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것 이름이 없고 파라미터 리스트, 바디, 반환 형식, 발생 가능 예외 리스트를 가짐

  • 람다의 장단점
    • 람다는 함수, 메서드 인수로 전달하거나 변수로 저장 가능
    • 간결성 → 익명클래스처럼 많은 코드를 구현할 필요 없음
    • 다중 CPU를 활용하는 형태로 구현되어 병렬 처리에 유리함
    • 불필요한 루프문의 삭제 가능하며, 함수의 재활용이 용이함
    • 개발자의 의도가 명확해져 가독성이 향상
    단점
    • 단순히 모든 원소를 순회 시 람다식이 좀 더 느릴 수 있음
    • 디버깅 시 함수 콜 스택 추적이 다소 어려움
    • 지나치게 남발 시 코드가 어렵고 지저분해짐
    • 무명함수는 재사용이 불가능함
  • 장점

4. 스트림이란?

  • 데이터의 흐름 일반적으로 데이터, 패킹, 비트 등의 일련의 연속성을 갖는 흐름을 의미

5. 직렬화란?

  • 객체를 바이트 스트림으로 바꾸는 것, 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것
  • 주된 목적 : 객체를 상태 그대로 저장하고 필요할 때 다시 생성해서 사용하는 것

 

6. OSI 7계층

  • TCP와 UDP는 어디 계층?
    • Http 프로토콜은 어떤걸 사용하고 있나?
      • 버전별 차이
    • ⇒ 7계층, 비연결성 프로토콜
  • ⇒ 4계층

URI (Uniform Resource Identifier)

  • 인터넷 자원을 나타내는 고유 식별자
  • 유일함

URL (Uniformed Resource Locator)

  • 프로토콜 포함
  • 해당 자원의 path 의미
  • 일반적으로 사이트 도메인을 자주 의미하는 편
  • 웹 뿐만 아니라 컴퓨터 내트워크 상의 자원을 모두 나타낼 수 있다

URN (Uniformed Resource Name)

  • 프로토콜을 포함하지 않음
  • 해당 자원의 이름을 의미함
  • 독립적인 자원 지시자
  • page 이후 부분까지 포함

1. URI 는 네트워크 상 자원을 가리키는 일종의 고유 식별자(ID) 이다.

2. URL, URN 은 URI 에 포함되는 개념이며 URL 은 자원의 위치, URN 은 자원의 이름 을 의미한다.


▶ 수업 내용

Spring IOC

  • IOC (Inversion Of Controll) : 제어의 역행
  • Container 기능을 제공하여 객체간의 결합도를 떨어뜨릴 수 있음

결합도

  • 코드의 한 요소가 다른 것과 얼마나 강력하게 연결되어 있는지
  • ⇒ 한 객체 안에서 다른 객체의 메서드를 호출하거나 멤버 변수에 접근할 때 두 객체가 연결되어 있다는 것
  • ⇒ 결합도가 높으면 유지보수에 좋지 않다. (결합된 클래스도 변경해줘야 하기 때문)

⇒ 결합도를 떨어뜨리는 것이 관건!

  • 다형성을 이용 → 인터페이스 이용
  • Container를 이용 → 팩토리 디자인 패턴

Container

  • 객체의 생성, 운용, 소멸 등의 객체의 라이프사이클 관리를 담당함
  • IoC : Container 기능이 됨

IoC 구현 방법

  • Dependency Lookup
  • Dependency Injection

Factory Pattern

  • GOF의 디자인 패턴 중 하나
  • 서로 다른 객체를 공통의 인터페이스를 이용해 생성함으로 그 객체를 이용하는 코드에서 생성 객체에 직접 결합되지 않게 하려는 것

클래스와의 결합을 없애는 법

  • 객체를 누가 생성해준다면 생성 결합이 줄어드며 결합을 없앨 수 있다
    • 객체를 대신 생성해서 넘겨주는 역할
    • 실제 어느 객체가 생성되는지 신경 쓰지 않고 모두 동일 타입으로 이용 가능
    • 인터페이스 이용 → 타입은 같지만 다른 객체임 ㅇㅇ
    • 의미 있는 값은 상수화
    인터페이스 이용
    • 클래스의 작성 규칙 제공 (추상 메서드 오버라이드)
    • 인터페이스로 참조변수 생성 후 모든 구현 클래스의 인스턴스 저장 가능
    • ⇒ 부모 참조변수(인터페이스)로 메서드 호출 시 자식 인스턴스의 오버라이드 메서드 호출
    • ⇒ 오버라이드에 의한 다형성 - 객체간의 결합도 감소!
    • Impl : 인터페이스를 상속받은 클래스
  • Factory Class

Spring Container

  • Container 객체 또는 Factory 객체
  • Spring Framework의 초기화를 담당함
    • ⇒ 개발자가 아닌 Spring Container가 객체 관리 - Spring IoC
    • ⇒ Spring Bean Configuration File(XML)를 이용하여 객체의 생명주기 관리
    Sprint Bean Configuration File(XML)
    • Spring Container는 패키지가 포함된 클래스를 제공받아 객체를 생성하여 관리
    • ⇒ Spring Container에 의해 관리되는 객체 : Spring Bean
    • ⇒ Spring Container는 리플렉션 기능을 이용하여 객체 생성 (class.forname()으로 classLoader에 의해 메모리에 동적 로딩하여 생성자를 이용해서 객체 생성 → 내부적으로 처리)
    • 객체 생성시 기존 Spring bean을 제공받아 의존관계 설정 가능 (Property 엘리먼트 이용)
    ApplicationContext 객체(Spring Container)
    • Spring Container 기능을 제공하기 위한 객체
    • Bean Configuration File(XML)의 bean 엘리먼트에 등록된 모든 클래스를 미리 객체로 생성하여 갖고 있다
    • ⇒ Spring Bean Configuration File(XML)을 제공받아 Spring Bean을 생성하여 관리
    • ⇒ 스프링 빈 객체가 만들어지고 컨테이너도 만들어지는 것임
    DL (Dependency Lookup) : Spring Container 로부터 필요한 Spring Bean을 제공받는 기능
    • ApplicationContext.getBean(String beanName) : Spring Bean을 구분하는 식별자(beanName) 을 전달받아 Spring Container로부터 Spring Bean을 검색하여 반환하는 메서드
    • ⇒ Object 타입으로 Spring Bean을 반환하므로 명시적 객체 형변환하여 사용
    • ⇒ 전달받은 beanName의 Spring Bean이 없는 경우 NoSuchBeanDefinitionException 발생
    ClassPathXmlApplicationContext.close()
    • ApplicationContext 객체를 제거하는 메서드
    • ⇒ Spring Container가 관리하는 모든 Spring Bean 제거
    BeanFactory
    • Spring Container 기능을 제공하기 위한 객체
    • ⇒ Bean Configuration File의 bean 엘리먼트에 등록된 클래스를 미리 객체로 생성하지 않고 getBean() 메서드 호출시 생성
    • ApplicationContext.getBean(String beanName, Class<T> clazz) : Spring Bean을 구분하는 식별자 (beanName)와 메모리의 저장된 클래스(Clazz)를 전달받아 Spring Container 로부터 Spring Bean을 객체 형변환하여 반환하는 메서드
  • Spring Container로 객체를 생성하여 제공받아 사용

IoC 컨테이너

  • Spring Container : 객체를 생성하는 순간, XML 설정파일에 등록된 Bean객체들이 초기화 됨

Spring Container로부터 Spring Bean을 제공받아 사용하는 방법

⇒ Bean Configuration File(XML)을 이용하여 bean 엘리먼트를 이용하여 클래스를 Spring Bean으로 등록

Bean

  • Spring Container에게 Spring Bean 관련 정보를 제공하는 엘리먼트
  • ⇒ Spring Bean : Spring Container에 의해 관리되는 클래스(객체)
  • class 속성 : Spring Bean으로 등록될 클래스를 속성값으로 설정 - 필수 속성
  • ⇒ class 속성값은 이클립스의 자동 완성 기능을 사용하여 작성하는 것을 권장
  • id 속성 : Spring Bean을 구분하기 위한 식별자(beanId & beanName)를 속성값으로 설정
  • ⇒ id 속성 대신 name 속성을 사용하여 식별자 설정 가능
  • ⇒ id 속성값은 클래스명 이름(부모 인터페이스 이름)을 이용하여 설정하는 것을 권장
  • ⇒ id 속성값은 class 속성이 설정된 경우 클래스 이름을 이용하여 자동 완성 기능을 사용하여 작성
  • init-method 속성 : Spring Bean 객체 생성 후 한번만 호출되어 초기화 작업을 실행하기 위한 메서드 이름을 속성값으로 설정 - 자동 완성 기능 사용 가능
  • destroy-method 속성 : Spring Bean 객체 소멸 전 한번만 호출되어 마무리 작업을 실행하기 위한 메서드 이름을 속성값으로 설정 - 자동 완성 기능 사용 가능
  • lazy-init 속성 : false & true를 속성값으로 설정
  • ⇒ false(기본) : Spring Container를 초기화할 때Spring Bean 객체를 미리 생성
  • ⇒ true : Spring Bean 객체를 제공받을 때 생성 (getBean() 호출해야 실행됨)

싱글톤 클래스

  • 싱글톤 클래스 : 프로그램에 객체를 하나만 제공하기 위해 작성된 클래스
  • ⇒ Spring Container는 리플렉션 기능을 이용하여 객체 생성함
  • =⇒ 생성자가 은닉화 되어 있어도 리플렉션 기능에 의해 생성자 사용 가능
  • 리플렉션 기능에 의해 클래스가 저장된 후 정적영역의 명령이 실행되어 객체 생성 ⇒ 정적영역에서 생성된 객체와 Spring Container에 의해 생성된 객체가 존재 → 객체가 2개만들어짐!!
  • factory-method 속성 : 싱글톤 클래스에서 객체를 반환하는 메서드 이름으로 속성 값 설정
  • ⇒ Spring Container에 의해 객체를 생성하지 않고 정적영역에서 생성된 객체를 제공받아 Spring Bean으로 사용 가능

Depends-on

  • Spring Container는 bean 엘리먼트 선언 순서대로 등록된 클래스를 Spring Bean 객체로 만든다
  • depends-on 속성 : bean 엘리먼트를 구분하는 식별자를 속성값으로 설정
  • ⇒ 속성값으로 설정된 bean 엘리먼트의 클래스를 먼저 Spring Bean 객체로 생성

import

  • 다른 Bean Configuration File의 Spring Bean 정보를 제공받아 포함하는 엘리먼트
  • resource 속성 : Bean Configuration File의 경로를 속성값으로 설정

Bean 객체의 Scope

Scope 속성

  • Spring Bean 객체의 생성 갯수(singleton : 기본 또는 prototype) 또는 사용범위(request 또는 session) 중 하나를 속성값으로 설정
    • bean 엘리먼트에 등록된 클래스로 Spring Bean 객체를 하나만 생성하여 제공
    scope 속성값으로 prototype으로 설정한 경우
    • bean 엘리먼트에 등록된 클래스로 Spring Bean 객체를 여러개 생성하여 제공
    • ⇒ lazy-init 속성값을 반드시 true로 설정하여 제공
  • scope 속성값으로 singleton으로 설정한 경우

다음주는 DI (Dependency Injection)


 파이널 프로젝트

> 동일한 컬럼들을 가지는 테이블을 합치기

> 구체화된 컬럼 추가

> 추상화된 선택지들은 따로 테이블을 관리

> git 이클립스 협업 프로젝트 생성 후 커밋

협업 완료 / pull push branch 생성 등등 및 협업 기준 개념 탑재 완료

반응형

'레거시' 카테고리의 다른 글

2022.03.08~03.10 의 기록  (0) 2022.03.09
2022.03.07 의 기록  (0) 2022.03.07
2022.03.03 의 기록  (0) 2022.03.03
2022.02.28의 기록  (0) 2022.02.28
2022.02.27의 기록  (0) 2022.02.27