스프링 핵심

박종현·2022년 5월 14일
1

SpringBoot 개념

목록 보기
1/3
post-thumbnail

스프링 핵심

  • 스프링은 프레임워크이다.
  • 오픈소스
  • IoC 컨테이너를 가진다 IoC(Inversion of Control) : 제어의 역전
    • Class : 설계도
    • Object : 실체화가 가능한 것(Class, Abstract Class) , 롤 게임을 비유하자면 누누라는 케릭터는 클래스가 실제 게임에서 실체화가 된것, 반면 챔피언은 추상적인 의미, 실체화 될수없음
      abstract public class Champion {
          
          public void skill_Q(){
              
          }
      
          public void skill_W(){
      
          }
      
      }
      public class Nunu extends Champion{
          @Override
          public void skill_Q() {
              super.skill_Q();
          }
      
          @Override
          public void skill_W() {
              super.skill_W();
          }
      
      }
    • 인스턴스 : 실체화 된 오브젝트
      • new 생성자를 통해 오브젝트를 힙 메모리공간에 올리게되면( 실체화) 참조변수가 메모리 주소값을 가리키게 됨

      • 이 인스턴스를 다른곳에서 사용하기 위해서 똑같은 생성자를 통해 생성하더라도 이전에 생성된 인스턴스 새로 생성한 인스턴스 다른메모리 주소를 레퍼런스하고 있는 다른 인스턴스라고 할 수 있음

        → 이러한 인스턴스를 사용하기 위해서 스프링은 컴포넌트로 등록한 오브젝트를 스캔하여 IoC 컨테이너에(메모리 영역) 올려주고, 인스턴스들을 관리함

  • DI를 지원한다
    DI(Dependency Injection) : 의존성 주입
    • IoC 컨테이너에서 관리되는 모든 인스턴스들을 다른 클래스, 메소드에서 가져와서 사용할 수 있음
    • 즉 필요한 오브젝트를 IoC컨테이너로부터 가져와서 사용하는것을 의존성 주입이라고 할 수 있다.
  • 스프링은 엄청나게 많은 필터를 가지고 있다.

  • 스프링은 많은 어노테이션을 가지고 있다.(리플렉션, 컴파일 체킹)

    • 어노테이션 :
      1. 코드 문법 에러 체크
      2. 코드 자동 생성 정보 제공
      3. 런타임시 특정 기능을 실행하는 정보 제공
    • 리플렉션 : 런타임시 리플렉션이란 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법
    • @Componet → 클래스 메모리에 로딩
    • @Autowired → 로딩된 객체를 해당 변수에 주입
      @Component
      class AClazz{
      	
      }
      class BClazz{
      	@Autowired
      	private AClazz a;
      }
      • B 클래스 내부에 어떤 요소들이 있는지 (메소드, 필드, 어노테이션)을 분석하고(리플렉션), 특정 기능을 하도록 설정함(어노테이션)
      • 위 경우는 BClazz 리플렉션 과정을 통해 @Autowired 를 체킹하고 IoC 컨테이너로부터 AClazz 인스턴스가 있는지 확인하고 있으면 Bclazz로 주입
  • 스프링은 MessageConverter를 가지고 있다. (기본값은 Json)

    가령 자바 애플리케이션, 파이썬 애플리케이션이 있다고 하고, 서로 통신을 한다고 하면, 자바의 오브젝트와 파이썬의 오브젝트는 다를것이다. 이때 MessageConverter는 통해 중간데이터인 Json으로 객체를 변환시켜주거나 응답데이터를 자바 오브젝트로 변환하는 역할을 할 것이다. ←

  • 스프링은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.

    • 통신은 바이트단위로 이루어짐 이때 바이트로 받은 데이터를 char로 캐스팅하기에는 매우 번거롭고, InputStreamReader는 바이트 크기를 정하고 사용하기 때문에 데이터 손실 및 낭비의 문제가 있음, 이때 BefferedReader를 사용하여 가변길이의 문자를 받을 수 있다.
    • 마찬가지로 BufferedWriter는 가변길이의 문자열을 쓸수 있도록 해주는 클래스
    • @RequestBody → BufferedReader 동작
    • @ResponstBody → BufferedWriter 동작

0개의 댓글