25일차 - Spring강의(IoC와 DI)

2024. 8. 19. 21:31·Java & Spring/Spring

□ 좋은 코드란

  • 논리가 간단해야 한다.
  • 중복을 제거하고 표현을 명확하게 한다.
  • 처음 보는 사람도 쉽게 이해하고 수정할 수 있어야 한다.
  • 의존성을 최소화해야 한다.
  • 새오룬 기능을 추가 하더라도 크게 구조의 변경이 없어야 한다.

※ 의존성이란?

public class Consumer {

    void eat() {
        Chicken chicken = new Chicken();
        chicken.eat();
    }

    public static void main(String[] args) {
        Consumer consumer = new Consumer();
        consumer.eat();
    }
}

class Chicken {
    public void eat() {
        System.out.println("치킨을 먹는다.");
    }
}

위 코드에서 만약 consumer가 먹고싶은게 바뀐다면 우리는 chicken이 들어간 모든 코드를 수정해야 한다.

이러한 코드를 강하게 결합되어있다고 할 수 있다.

 

Interface를 활용하면 이러한 문제를 해결할 수 있다.

public class Consumer {

    void eat(Food food) {
        food.eat();
    }

    public static void main(String[] args) {
        Consumer consumer = new Consumer();
        consumer.eat(new Chicken());
        consumer.eat(new Pizza());
    }
}

interface Food {
    void eat();
}

class Chicken implements Food{
    @Override
    public void eat() {
        System.out.println("치킨을 먹는다.");
    }
}

class Pizza implements Food{
    @Override
    public void eat() {
        System.out.println("피자를 먹는다.");
    }
}

이러한 코드를 약하게 결합되어있다고 할 수 있다.

□ Ioc(설계 원칙)

ex) 음식을 맛있게 만들기 위한 원칙

  • 신선한 재료 사용
  • 요리 순서 지키기
  • 음식 비율 맞추기

- 제어의 역전

  • 이전 Consumer가 직접 Food를 만들어 먹었기 때문에 새로운 Food를 만들려면 코드 변경이 불가피 했다.
  • 이를 개선하여 만들어진 Food를 Consumer에게 전달해주는 식으로 변경함으로써 Consumer는 코드변경 없이 Food를 먹을 수 있게 됐다.
  • 위와 같은 상황을 Consumer -> Food에서 Food -> Consumer으로 제어의 흐름이 역전되었다고 한다.

□ DI(디자인 패턴)

ex) 음식의 레서피

 

- 의존성 주입

  1. 필드에 직접 주입
  2. 메서드(setter)를 통한 주입
  3. 생성자를 통한 주입

 

 

'Java & Spring > Spring' 카테고리의 다른 글

28일차 - Spring강의(Bean 수동 등록, Type중복 시 Bean 주입)  (0) 2024.08.22
26일차 - Spring강의(Entity, 영속성 컨텍스트)  (0) 2024.08.20
25일차 - Spring강의(3 Layer Architecture)  (0) 2024.08.19
21일차 - Spring강의(Spring MVC)  (0) 2024.08.12
21일차 - Spring강의(테스트 코드, lombok)  (0) 2024.08.12
'Java & Spring/Spring' 카테고리의 다른 글
  • 28일차 - Spring강의(Bean 수동 등록, Type중복 시 Bean 주입)
  • 26일차 - Spring강의(Entity, 영속성 컨텍스트)
  • 25일차 - Spring강의(3 Layer Architecture)
  • 21일차 - Spring강의(Spring MVC)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java기초
    데이터 타입
    java 메서드
    java
    데이터 크기
    java 에라토스테네스의 체
    java arrays.copyofrnage()
    개발로드맵
    java 멤버
    java super
    java enhance switch
    자료구조
    java 세수의합
    java 제어자
    Java 생성자
    java 유클리드 호제법
    Java this
    java two-pointer
    프로그래머스 java 기초트레이닝
    프로그래머스 java 기초 트레이닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
25일차 - Spring강의(IoC와 DI)
상단으로

티스토리툴바