240112 2ndTIL : DI/IoC와 객체지향 프로그래밍

HR J·2024년 1월 12일
0

스프링 개념 정리

목록 보기
6/7

DI/IoC

DI와 IoC는 스프링 프레임워크의 핵심 원칙 중 하나로, 객체 간의 결합도를 낮추고 코드의 유지 보수를 용이하게 만드는 데 중요한 역할을 한다.

IoC(Inversion of Control)

  • IoC는 '제어의 역전'이라는 뜻.
  • 객체의 생성과 생명주기 관리를 개발자가 아닌 프레임워크가 담당하도록 하는 원칙.
  • 일반적으로, 개발자는 객체를 직접 생성하고 관리하는 데 책임이 있으나, 스프링에서는 그 책임이 스프링 컨테이너에게 넘어감.
  • 개발자는 비즈니스 로직에 집중할 수 있고, 객체 간의 의존성 관리는 스프링 컨테이너가 알아서 처리해줌.
  • 이런 방식으로 코드의 결합도를 낮추고 확장성을 높일 수 있음.

DI(Dependency Injection)

  • DI는 위의 IoC의 원칙을 구현하는 방법 중 하나.
  • DI는 '의존성 주입'이라는 뜻으로, 객체가 필요로 하는 의존성을 외부에서 주입하는 방식.
  • 이를 통해 객체 간의 결합도를 더욱 낮출 수 있음.
ex) 예를 들어, A 클래스가 B 클래스의 메소드를 사용하려면, 일반적으로 A 클래스 내부에서 B 클래스의 객체를 생성해야 함. 이 경우, A 클래스는 B 클래스에 강하게 의존! 하지만 DI 사용시, B 클래스의 객체는 외부에서 A 클래스에 주입 -> A 클래스가 B 클래스의 구체적인 구현에 의존하지 않게 됨.

DI방식의 종류

  • 스프링에서는 주로 세 가지 방식의 DI를 지원함 : 생성자 주입, 세터 주입, 필드 주입.
  • 위의 DI들은 각각 적절한 상황에 따라 사용됨.

이러한 IoC와 DI의 원칙 덕분에, 스프링에서의 유연하고 확장성 있는 애플리케이션 개발이 가능하다. 개발자는 구체적인 객체 생성과 관리에서 해방되어 비즈니스 로직에 집중할 수 있으며, 테스트와 유지 보수도 용이해진다.

객체지향 프로그래밍

  • 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍 패러다임 중 하나로, 프로그램을 객체들의 집합으로 보고 이들이 서로 상호작용하는 방식으로 설계하고 구현하는 방법.
  • 객체는 상태(state)와 행동(behavior)을 가지며, 이는 각각 객체의 속성(attribute)과 메소드(method)로 표현됨.

< 객체지향 프로그래밍의 핵심 원칙>

  1. 캡슐화(Encapsulation): 객체의 상태와 행동을 하나의 단위로 묶는 것. 객체의 상태는 private 접근 제어자를 통해 외부로부터 보호되며, 상태 변경은 메소드를 통해서만 가능케 함.

  2. 상속(Inheritance): 기존 클래스의 특성을 그대로 물려받아 새로운 클래스를 생성하는 것. 이를 통해 코드의 중복을 줄이고 재사용성을 높일 수 있음.

  3. 다형성(Polymorphism): 같은 타입이나 메소드에 대해 다양한 방식으로 동작을 수행할 수 있게 하는 것을 말합니다. 이를 통해 유연성과 확장성을 높일 수 있음.

  4. 추상화(Abstraction): 복잡성을 줄이고, 필요한 핵심 기능만을 표현하기 위해 객체의 공통적인 특성들을 추출하는 것.

자바 스프링에서는 위와 같은 객체지향 프로그래밍 원칙들이 깊게 적용되어 있다. 그에 따른 예시는 아래와 같다.

1) 캡슐화: 스프링의 Bean은 캡슐화 원칙을 따름. Bean의 내부 상태는 외부에서 직접 접근할 수 없고, Bean 제공 메소드를 통해서만 접근 및 변경이 가능.

2) 상속: 스프링은 상속을 통해 기능을 확장. 예를 들어, @Component, @Service, @Repository 등의 어노테이션은 모두 @Component를 상속받아 사용.

3) 다형성: 스프링은 다형성을 통해 유연성을 높임. 예를 들어, 스프링은 JdbcTemplate 클래스를 통해 다양한 데이터베이스 작업을 추상화하고, 실제 구현은 개발자가 선택한 데이터베이스에 따라 달라짐.

4) 추상화: 스프링은 복잡한 기술을 추상화하여 개발자가 보다 쉽게 사용할 수 있게 함. 예를 들어, 스프링의 JdbcTemplate는 JDBC의 복잡한 작업을 추상화하여, 개발자가 SQL 쿼리 실행에만 집중할 수 있게 도와줌.

이렇게 객체지향 프로그래밍은 스프링에서 중요한 역할을 하며, 이를 통해 개발자는 보다 유연하고 강력한 애플리케이션을 구축할 수 있다.

profile
Newbie Engineer&Programmer

0개의 댓글

관련 채용 정보