개발일기/CS(면접)
DI와 IoC이란? // 객체지향 프로그램밍이란 ?
w.llama
2024. 7. 25. 21:43
DI와 IoC이란?
- DI(Dependency Injection)생성자 주입 (Constructor Injection)
- 설명: 생성자를 통해 의존 관계를 주입하는 방법으로, 객체 생성 시 딱 한 번만 호출됩니다.
- 장점: 불변성을 보장하며, 주입받는 필드에 final 키워드를 사용할 수 있습니다.
- 사용 방법: 스프링 3.4 버전 이전에서는 @Autowired를 생략할 수 있습니다.
- 수정자 주입 (Setter Injection)
- 설명: Setter 메서드를 통해 의존 관계를 주입하는 방법입니다. 주입된 의존성을 나중에 변경할 수 있는 유연성을 제공합니다.
- 장점: 필요한 경우 주입된 의존성을 변경할 수 있습니다.
- 단점: final 키워드를 사용할 수 없습니다.
- 사용 방법: Setter 메서드에 @Autowired를 붙여 사용합니다.
- 필드 주입 (Field Injection)
- 설명: 필드에 직접 의존 관계를 주입하는 방법입니다.
- 장점: 코드가 간결해집니다.
- 단점: 외부에서 변경이 불가능하고, 테스트 코드 작성이 어렵습니다. 의존 관계를 명확히 파악하기 힘듭니다.
- 사용 방법: 필드에 @Autowired를 붙여 사용합니다. 하지만 최근에는 잘 사용하지 않는 것이 권장됩니다.
- IoC (Inversion of Control)IoC 컨테이너
- 설명: 스프링에서 IoC를 구현하는 컨테이너를 제공합니다. 이 컨테이너는 빈 팩토리, DI 컨테이너, 애플리케이션 컨텍스트 등으로 불립니다.
- 역할: 빈의 생성, 설정, 의존 관계 주입을 담당합니다.
- 설정 방법: XML, 자바 코드, 어노테이션 등 다양한 방식으로 설정할 수 있습니다.
- DI의 장점
- 결합도 감소: 객체 간의 결합도를 낮춰 코드의 유연성과 유지보수성을 높입니다.
- 테스트 용이성: Mock 객체를 쉽게 주입할 수 있어 단위 테스트 작성이 용이합니다.
- 코드 재사용성 증가: 다양한 환경에서 재사용 가능한 코드를 작성할 수 있습니다.
- IoC의 장점
- 모듈화: 객체의 생명 주기와 의존성을 중앙에서 관리하여 모듈화를 용이하게 합니다.
- 유지보수성: 코드의 가독성과 유지보수성을 높입니다.
- 유연성: 변경에 유연하게 대처할 수 있으며, 구성 파일을 통해 다양한 설정이 가능합니다
객체지향 프로그램밍이란 무엇이고 어떻게 활용하는가?
- 프로그램을 객체 단위로 나누어 작업하는 방식으로,객체들의 상호작용을 통해 프로그램을 설계하고 개발하는 프로그래밍 패러다임이다. 그 특징으로 추상화, 상속, 다형성, 캡슐화가 있다.
- 추상화(Abstraction)
- 객체의 공통적인 특징을 추출하여 정의하는 과정이다. 이를통해 복잡한 시스템을 단순화 하고 중요한 부분에 집중할 수 있다. - 상속(Inheritance)
- 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 재사용하는 기능이다. 이를통해 코드의 재사용성을 높이고, 유지보수를 용이하게 한다. - 다형성(Polymorphism)
- 동일한 메서드나 연산자가 상황에 따라 다르게 동작할 수 있는 능력. 코드의 유연성과 확장성을 높이는 데 기여한다. - 캡슐화(Encapsulaion)
-객체의 상태를 외부에서 직접 접근하지 못하도록 하고, 메서드를 통해서만 접근할 수 있도록 하는 방법이다. 이를통해 데이터의 무결성을 유지하고, 코드의 모듈화를 촉진한다.
- 추상화(Abstraction)
- 객체지향 프로그래밍의 장점
- 유지보수 용이
- 코드가 모듈화 되어 있어 특정 부분만 수정하면 되므로 유지보수가 쉽다. - 코드 재사용성
- 상속과 다형성을 통해 기존 코드를 재사용할 수 있어 개발의 효율성을 높인다. - 대형 프로젝트에 적합
- 클래스 단위로 모듈화 하여 여러 명이 협업하기 용이하다. - 직관적 설계
- 실제 세계를 모델링하여 직관적이고 이해하기 쉬운 코드를 작성할수 있다.
- 유지보수 용이
- 객체지향 프로그래밍의 단점
- 처리 속도 저하
- 절차적 프로그래밍에 비해 처리속도가 느릴수 있다. - 메모리 사용 증가
- 객체가 많아지면 메모리 사용량이 증가될 수 있다. - 복잡한 설계
- 초기 설계 단계에서 많은 시간과 노력이 필요하다.
- 처리 속도 저하
- 객체지향 프로그래밍의 활용
- java,python.c#등 다양한 언어에서 활용하며 소프트웨어 개발의 유연성, 유지보수성, 재사용성을 높이는데 사용된다.