Today I Learned_230206
토비의 스프링 3.1
서론
스프링이란 무엇인가?
자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크
스프링을 사용한다는 것은 아래의 세 가지 요소를 사용하여 애플리케이션을 개발
- 스프링 컨테이너
- 애플리케이션의 기본 틀. 애플리케이션 컨텍스트라고도 한다.
- 스프링 런타임 엔진
- 스프링 컨테이너 : 애플리케이션을 구성하는 오브젝트를 생성하고 관리
- 핵심 프로그래밍 모델 지원
- IoC/DI : 오브젝트의 생명주기와 의존관계와 관련. 디자인 패턴과 객체지향 설계 원칙에 해당
- 서비스 추상화 : 구체적인 기술과 환경에 종속되지 않도록
- AOP : 여러 곳에 산재해서 나타나는 부가적인 기능을 독립적으로 모듈화
- 방대한 양의 기술 API 제공
클래스 → 스프링 컨테이너 위에서 동작
코드 → 핵심 프로그래밍 모델을 따라서 작성
엔터프라이즈 기술 사용 → 스프링이 제공하는 기술 API와 서비스 활용
스프링이 성공한 이유
견고하고 건전한 자바와 엔터프라이즈 개발의 핵심 가치에 충실했기 때문
- 단순함
- 기술이 복잡해져 가면서 자바의 본질인 객체지향의 특징을 잃어갔음
- 잃어버린 객체지향의 장점을 다시 살림
- 유연성
- 많은 서드파티 프레임워크의 지원을 받음
- 스스로 발전하는 프레임워크
- 스프링 개발 철학 : 항상 프레임워크 기반의 접근 방법을 사용하라
스프링을 효과적으로 익히기 위한 방법
- 스프링의 핵심 가치와 원리에 대한 이해
- 스프링 스스로가 그 가치를 어떻게 적용해서 만들었는지?
- 핵심 가치와 핵심 기술 및 프로그래밍 모델 학습
- 스프링의 기술에 대한 지식과 선택 기준 정립
- 다양한 선택의 문제를 각 기술영역별로 효과적으로 다루는 법 배우기
- 스프링의 적용과 확장
- 스프링의 다양한 기술을 실제 애플리케이션 개발에 어떤 식으로 적용해야 하는지 공부
- 실전에서 사용하는 데 필요한 응용 방법과 확장 방법 공부
스프링을 잘 학습했는지 알아보는 방법
- 스프링을 공부하고 적용한 이후에 자신이 좀 더 나은 개발자가 되었는지
- 객체지향 원칙에 충실하게 작성했는지
- 생산성과 품질이 더 나아졌는지
- 이전보다 더 많은 테스트 코드를 작성했는지
- 유연하고 확장이 손쉬운 애플리케이션이 만들어지고 있는지
1장. 오브젝트와 의존관계
스프링
- 자바를 기반으로 한 기술.
- 가장 중요한 가치 → 객체지향 프로그래밍이 가능한 언어 그래서 코프링이 가능한 듯!
- 핵심 철학 : 객체지향 프로그래밍이 제공하는 혜택을 누릴 수 있도록 기본으로 돌아가자.
오브젝트
- 스프링이 가장 많이 관심을 두는 대상
- 오브젝트의 생명주기(생성, 관계, 사용, 소멸까지의 전 과정)를 알아야 함
- 오브젝트에 대한 관심 → 오브젝트에 대한 설계로 발전
오브젝트 설계와 구현에 관한 여러 가지 응용 기술과 지식들
→ 객체지향 설계, 디자인 패턴, 리팩토링, 단위 테스트 등..
DAO(Data Access Object)
- DB를 사용해 데이터를 조회하거자 조작하는 기능을 전담하도록 만든 오브젝트
자바빈 규약
- 프론트/백단 간의 약속으로, 일관된 방식으로 자바 클래스를 사용하기 위한 규칙
- 자바빈 규약의 특징
- 파라미터가 없는 기본 생성자 필수
- default 패키지가 아닌 지정된 패키지에 저장
- 멤버 변수는 private로 선언
- getter/setter 구현 필요
자바 빈 규약을 따른 간단한 DAO
public class User {
//아래 세 개는 프로퍼티에 해당
String id;
String name;
String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}