Today I Learned_230206

2 분 소요

토비의 스프링 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;
    }
}

카테고리:

업데이트: