▶CodeStates Back-End 17

TIL [0617] Spring DI & @componentScan

Sptring DI, 스프링에서의 의존관계 주입 방법 ① 생성자 주입 생성자를 통해서 의존 관계를 주입받는 방법 생성자에 @Autowired를 붙여주면 스프링 컨테이너에 @Component로 등록된 빈에서 생성자에 필요한 빈을 주입함. # 특징 생성자 호출 시점에 딱 1번만 호출되며, 생성자가 1개만 존재하는 경우에는 @Autowired를 생략해도 자동으로 주입된다. 주입받을 필드를 final로 선언할 수 있고, NullPointerException을 방지할 수 있다. (스프링이 클래스의 객체를 생성해서 빈에 넣는데 생성자가 반드시 호출되므로 1개인 경우에만 생략가능하다.) ② 수정자 주입(setter이용) setter 메서드를 통해서 의존 관계를 주입하는 방법 # 특징 변경 가능성이 있는 의존 관계에 ..

TIL [0616] Bean Scope(Singleton)

빈 스코프(Bean Scope) 빈이 존재할 수 있는 범위 스프링은 기본적으로 모든 빈을 singleton으로 생성하여 관리한다. 빈은 여러 범위 중 하나에 배치되도록 정의할 수 있으며, spring Framework는 6개의 범위를 지원한다. 특정 빈 정의에서 생성된 개체에 연결할 다양한 의존성,구성 값, 해당 개체의 범위도 제어할 수 있다. 사용자 정의 범위를 생성할 수도 있다. # Bean Scope 종류 ♤ singleton 빈 등록시 따로 설정을 하지 않으면 기본값으로 지정된다. 애플리케이션에 오직 하나만 생성되는 일반적인 스코프이다. ♤ prototype 컨테이너에 빈을 요청할 때마다 매번 새로운 객체를 생성해주며, 빈의 생성과 DI까지만 관여한다. 이후, 프로토타입을 받은 클라이언트가 객체를..

TIL [0616] Spring Container와 Bean

스프링 컨테이너(Spring Container) 내부에 존재하는 애플리케이션 빈의 생명주기를 관리하는 역할을 담당한다. ApplicationContext를 스프링 컨테이너라고 하며, 인터페이스로 구현되어 있다. (BeanFactory를 상속받아 ApplicationContext가 구현되어 있다.) 구현방법 ☞ XML 또는 애너테이션 기반의 자바 설정 클래스 역할 ☞ 빈의 인스턴스화, 구성, 전체 생명주기 및 제거를 처리함 ☞ 의존성 주입(DI)를 통해 애플리케이션의 컴포넌트를 관리함 사용 이유 ☞ 객체를 사용하기 위해서는 new를 사용해야 하나, 이 경우 상호 참조에 의한 의존성이 높아진다. 객체지향 프로그래밍에서는 낮은 결합도와 높은 캡슐화를 지향하기 때문에 객체 간의 의존성을 낮추기 위해 이를 사용한..

TIL [0615] 아키텍처와 Spring Boot 개요

컴퓨터 시스템에서의 아키텍처 # 시스템 아키텍처 하드웨어와 소프트웨어를 모두 포함하는 시스템의 전체적인 구성을 표현한 것으로, 구성 요소들 간의 상호작용이 어떻게 이루어지는지와 정상 동작을 위한 원리 등이 표현된다. # 소프트웨어 아키텍처 / 애플리케이션 아키텍처 컴퓨터 내의 하드웨어를 제외한 모든 프로그램을 포함하며, 각 소프트웨어의 구성을 보여준다. Ex) Java 플랫폼 아키텍처 # 웹 애플리케이션 아키텍처 기본적인 아키텍처는 [클라이언트 ↔ 서버(웹 어플리케이션) ↔ 데이터베이스]이다. 계층형 구조를 가지는 웹 애플리케이션의 아키텍처는 크게 3가지로 나눌 수 있다. API 계층, 서비스 계층, 데이터 액세스 계층으로 서버 내에서 서로 상호 작용한다. - API 계층 (API Layer) : 클라이..

TIL [0614] Spring Framework

Framework 어플리케이션 간의 통신이나, 데이터 저장소에 저장하는 다양한 기능들을 라이브러리의 형태로 제공하여 개발자가 핵심 로직 개발에 집중할 수 있도록 돕는 것 Spring Framework 자바 기반의 웹 어플리케이션을 개발하는데 필요한 framework # Framework vs. Library 라이브러리는 개발자가 코드를 짜면서 필요한 기능을 해당하는 라이브러리에서 호출해서 사용할 수 있도록 만들어놓은 것이다. 즉, 어플리케이션 흐름의 주도권이 개발자에게 있다. 반면, 개발자가 작성한 코드를 사용하여 어플리케이션의 흐름을 만들어내는 것을 framework이 해주므로, 어플리케이션 흐름의 주도권을 spring framework이 가진다. ♧ 스프링 이전의 기술들... JSP(Java Serv..

[Section1] SW 벡엔드 부트캠프 첫번째 회고 :)

4월 25일부터 오늘까지 벌써 section1이 끝났는데,,, 정말 시간이 말도 안되게 빨리 지나갔다. 엉망진창 같지만 그래도 뭔가를 하긴 해서 그에대한 회고를 해보려고 한다. # 지난 한달간 내가 한 일들... 1. 프로그래밍의 시작과 Java 폭풍진도 나가기 몇번 써보지도 못한 리눅스도 제대로 이해해보고, 프론트엔드도 잠깐 맛보고, git 등 여러 프로그램의 활용법도 배웠다. 블로그도 만들어만 놓고 안쓰다가 다시 사용할 이유를 찾았다. TIL(Today I Learned)를 배운날 기준 +3일 내에는 다 해보려고 했지만 결국은 밀리기 시작했다 ㅎ... 일단 제일 중요한건 진짜 미친듯한 속도로 자바 공부를 하고 있다는 것이다. 사실 아직 이해되지 않은 부분이 많지만 주말에 조금씩 보충을 할거다 ㅠㅠ 아..

TIL [0517] 제네릭, 컬렉션 프레임워크

Generic, 제네릭 데이터의 타입에 의존하지 않고, 하나의 값이 여러 데이터 타입을 가질 수 있도록 하는 방법으로, 컴파일 시에 데이터의 타입을 검사하도록 한다. ArrayList arrayList = new ArrayList( ); 위와 같이 컬렉션을 생성할 때 ''안에 들어가는 타입을 제네릭이라고 한다. 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 타입으로, 컴파일 시에 해당 타입으로 변환하여 매개변수화 된 유형을 삭제한다. # 제네릭의 장점 - 잘못된 타입을 컴파일 단계에서 검사하여 런타임 시 프로그램 오류를 방지할 수 있다. - 타입 체크 및 수동 형변환에 대한 관리가 편하다. - 코드의 재사용성을 높인다. # 자주 사용되는 타입 매개변수 매개변수의 형태를 작성하는 데에..

TIL [0513] 객체 지향 프로그래밍 - 다형성, 추상화

다형성, Polymorphism 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미한다. 즉, 상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조할 수 있도록 한 것이다. (반대의 경우는 불가능하다!) Ex) Animal 클래스를 상속받은 Rabbit 클래스 Animal animal1 = new Rabbit( ); → animal1은 상위 클래스 타입을 가지는 참조변수이고, 실제로 생성된 객체는 Rabbit 클래스이다. ※ 참조변수가 사용할 수 있는 멤버의 개수는 실제 객체의 멤버 개수보다 같거나 적어야 한다. ※ 사용가능한 멤버의 개수는 참조변수의 타입에 의해 결정된다. 코드의 중복을 줄일 수 있다. 오버로딩과 오버라이딩을 통해 코드를 최소화할 수..

TIL [0512] 객체 지향 프로그래밍 - 상속, 캡슐화

상속, Inheritance 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 공통적인 속성과 기능을 상위 클래스로부터 확장하여 하위 클래스에 나타낸다. 새로 작성하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 'extends'와 같이 써주면 된다. (자바의 클래스 상속계층도의 최상위에 위치한 상위 클래스는 Object클래스이며, 아무 상속을 받지 않는 클래스에 자동적으로 컴파일러가 extends Object를 추가하여 상속받도록 한다.) ※ 생성자와 초기화 블럭은 상속되지 않고, 멤버만 상속된다. ※ 하위 클래스의 멤버 개수는 상위 클래스보다 항상 같거나 많다. #상속을 사용하는 이유 코드를 재사용하여 적은 양의 코드로 새로운 클래스를 작성할 수 있어 코드의 중복을 제거할 수 있다...

TIL [0511] 객체 지향 프로그래밍 - 클래스

클래스 객체를 정의해놓은 것, 객체의 설계도 또는 틀 인스턴스화 : 클래스로부터 객체를 만드는 과정으로, 이때 생성된 객체를 해당 클래스의 인스턴스라 함. 클래스의 구성요소 ① 필드(field) : 클래스의 속성을 정의한 변수 ② 메서드(method) : 클래스의 기능을 정의한 함수 ③ 생성자(constructor) : 클래스의 객체를 생성하는 역할 ④ 이너 클래스(inner class) : 클래스 내부의 클래스 # 인스턴스의 생성 클래스명 변수명; 변수명 = new 클래스명( ); Ex) Human hu = new Human( ); → 생성된 변수는 참조변수로, 객체의 주소가 저장되어 있다. → new에 의해 클래스의 인스턴스가 메모리의 빈 공간에 생성된다. → 생성된 인스턴스의 멤버변수를 사용하려면 ..