CS기초 지식 1

5w31892p·2023년 3월 18일
0

CS_Study

목록 보기
1/9

자바 코드가 컴파일되는 일련의 단계

  1. 개발자의 자바 소스코드(.java) 작성
  2. 자바 컴파일러가 해당 소스를 읽어 바이트코드(.class) 로 컴파일
  3. 컴파일 된 바이트코드를 JVM의 클래스 로더로 전달
  4. 클래스 로더는 동적로딩을 통해 필요한 클래스들을 JVM의 메모리에 올림
  5. 실행엔진은 JVM 메모리에 올라온 바이트 코드를 실행
  • 바이트코드란?
    JVM(자바가상머신)이 읽을 수 있는 코드 (컴퓨터는 못읽음)
  • 클래스 로더 세부 동작
    1. 로드 : 클래스 파일 가져와 JVM 메모리에 로드
    2. 검증 : 자바 언어 명세(Java Language Specification) 및 JVM 명세에 명시된 대로 구성되어 있는지 검사
    3. 준비 : 클래스가 필요로하는 메모리 할당 (필드, 메서드, 인터페이스 ...)
    4. 분석 : 클래스 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경
    5. 초기화 : 클래스 변수들을 적절한 값으로 초기화 (static 필드)
  • 실행엔진 (Execution Engine) 두가지 방식
    • 인터프리터
      • 바이트 코드 명령어롤 하나씩 읽어서 해석하고 실행
      • 각각의 실행은 빠르나 전체적인 실행속도는 느림
    • JIT 컴파일러 (Just-In-Time Compiler)
      • 인터프리터의 단점을 보완하여, 바이트 코드 전체 컴파일 후 바이너리 코드로 변경하고, 해당 메서드는 더이상 인터프리팅하지 않고, 바이너리 코드로 직접 실행
      • 하나씩 인터프리팅하여 실행하지 않고 바이트코드 전체가 컴파일된 바이너리 코드를 실행되는 것이기 때문에 전체적인 속도는 인터프리팅 방식보다 빠름


DI와 IOC 설명

DI(Dependency Injection)

  • 의존성 주입
  • 객체(Bean)를 직접 생성하는 것이 아닌 외부(IOC컨테이너)에서 생성 후 의존 관계 주입 시켜주는 방식
  • DI를 통해 모듈 간 결합도가 낮아지고 유연성이 높아짐

IoC(Inversion of Control)

  • 제어의 역전
  • 메소드나 객체의 호출 작업을 개발자가 아닌 외부에서 결정
  • 의존성을 역전시켜 결합도 줄이고, 유연한 코드 작성 -> 가독성, 코드 중복. 유지보수 편리

의존성 주입 해야하는 이유
1. Test 용이
2. 코드 재사용성 높아짐
3. 객체 간 의존성 줄이거나 없앨 수 있음
4. 객체간 결합도 낮추면서 유연한 코드 작성 가능

DI 세가지 방법 설명과 차이점 및 왜 생성자 방식으로 하는지

방법

  • 생성자 주입(Constructor Injection)
    • 클래스의 생성자 하나
    • 해당 생성자로 주입받을 객체가 bean으로 등록되어 있다면 @Autowired 생략 가능
  • 수정자 주입(Setter Injection)
    • Setter 메소드에 @Autowired 어노테이션을 붙이는 방법
    • 어디서든 변경이 가능한 문제가 있음
  • 필드 주입(Field Injection)
    • @Autowired 어노테이션 사용
    • 코드가 간결하지만 외부에서 변경 어려움
    • 객체지향적으로 좋지 않음

차이점 및 생성자 방식 권장 이유

  • 순환 참조 방지
    • 필드나 setter 주입을 사용하면 빈 생성 후 참조하기 때문에 아무런 오류나 경고없이 구동되지만, 생성자를 통해 주입하고 실행하게 되면 BeanCurrentlyInCreationException 발생
    • 순환 참조 뿐만아니라 의존 관계 내용을 외부로 노출 시킴으로써 어플리케이션 실행 시점에서 오류 체크가 가능함
  • 불변성
    • setter나 필드 주입은 불필요한 수정 가능성을 열어두게 되어 개방-폐쇄 원칙 위반하고, 필드 주입의 경우 null이 만들어질 가능성이 있지만, 생성자로 의존성을 주입할 때 final로 선언하여 런타임에서 의존성을 주입받는 객체가 변할 가능성이 없어짐
  • 테스트에 용이

0개의 댓글