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

  • 최근 글

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

티스토리툴바