2023. 1. 3. 19:56ㆍCS
※ 지식이 많이 부족하여 이론적인 부분이 이해도 어렵고 설명도 주관적인게 많습니다. 틀린부분은 지적해주시면 감사하겠습니다.
면접에서 기술적인 부분으로 제일 자주 질문받은 내용으로는 '왜 스프링인가'에 대한 내용이었습니다.
면접보기전까지도 그냥 배웠으니까 하는거지...정도였습니다만, 면접을 위해서라도 한번 알아보겠습니다.
1. 프레임워크?
개발에 있어 하나의 뼈대 역할을 한다.
대표적인 프레임워크로는 자바의 스프링, 파이썬의 장고 등이 있습니다.
02. 스프링 프레임워크
- 현재 가장 많은 기업에서 사용하고 있는 JAVA를 기반으로한 프레임워크
- 전자정부 표준 프레임워크
03. 장점
- POJO (Plan Old Java Object)
POJO는 순수한 JAVA 객체를 뜻합니다.
프로젝트가 커지면 커질수록 다양한 클래스를 상속받거나 의존하여 확장성이 떨어집니다.
때문에, POJO라는 의존하거나 종속되지 않는 순수한 자바 객체를 사용합니다.
- DI (Dependency Injection)
DI란 '의존성 주입' 을 뜻합니다. 스프링에선 이 의존성 주입을 통해 필요로하는 각종 클래스를 Bean Container에 두고 필요할때마다 불러와서 사용합니다. 이때 주로 사용되는 것이 @Autowired 라는 어노테이션입니다.
ex)
- IOC (Inversion of Control Container)
IOC는 '제어 역전'을 뜻합니다. 위의 의존성 주입과 연결되는 부분입니다.
기존에는 개발자가 Bean을 직접 관리해야했지만, DI를 이용하면 Bean Container에서 이를 관리해줍니다.
때문에 기존에는 사용자가 제어를 했지만, DI를 통해 스프링이 제어를 하기 때문에 제어 역전이라고 부릅니다.
Q. 왜 new를 사용하지 않고 의존성 주입을 사용하는가?
스프링에 대한 설명에 이어 의존성 주입에 대해 연결되는 질문을 받았습니다.
왜 new를 사용하지 않고 DI를 사용하는가? 무엇이 편한가? 였습니다.
물론 그냥 그렇게 배웠으니까...라고는 할 수 없으니 최대한 아는대로 얘기했습니다만...
도대체 왜 DI를 쓰는게 더 효율적인지에 대해 알아보았습니다.
A. 사용자가 직접 Bean을 관리하지 않아도 스프링에서 관리해주기 때문에 메모리 관리가 용이합니다.
또한 new를 사용하여 코드를 작성하게 되면 클래스간의 결합성이 강해져서 코드 수정이 일어날때 의존 관계를 수정하기가 어렵습니다. 하지만 의존성 주입을 통해 결합을 유연하게 하여 객체 간 의존 관계를 보다 쉽게 변경할 수 있습니다.
싱글톤 패턴을 사용하는데에 용이하여 JVM의 메모리 사용을 최소화하기 쉽다.
+제가 공부할때는 위의 장점들을 배웠습니다. 검색해보니 제가 지금까지 사용해왔던 방법은 '필드 주입' 이라는 방법을 사용하여 의존성 주입을 하고 있었습니다. 하지만 이 '필드 주입' 방법의 단점에 대해 많은 설명이 있고 이보다는 생성자를 사용하는 방법을 추천하는 글을 읽을 수 있었습니다. 추후에는 이 방법에 대해 좀더 생각해보고 코드를 작성하는 방안으로 해보는게 좋겠습니다.
'CS' 카테고리의 다른 글
VO인가 HashMap인가? (1) | 2023.01.27 |
---|---|
VO와 DTO의 차이는? (0) | 2023.01.27 |
[DB] 조인이란? - 1 (0) | 2023.01.25 |
스레드(Thread)란 무엇일까? (0) | 2023.01.03 |
API, 라이브러리, 프레임워크에 대해 알아보자 (0) | 2022.12.29 |