TIL(20240725) [DI/IoC와 객체지향프로그래밍]
- 기술면접 7,8 제출하기
- 튜터님 면담 기술면접 준비
- DI, IoC에 대해 설명해주세요.
- IoC와 DI는 객체지향 프로그래밍에서 객체간의 의존성을 관리하고 제어하는 개념으로 특히 스프링 프레임워크에서 많이 사용됩니다. IoC는 “제어의 역전”을 의미하며, 객체의 생성과 관리를 개발자가 아닌 프레임워크나 컨테이너가 담당하는 디자인 원칙입니다. 즉, 객체의 생명주기(생성,소멸 등)를 개발자가 직접 관리하지 않고 컨테이너가 관리하도록 역전시키는 것을 말합니다. DI는 의존성 주입을 의미하며, 객체간의 의존관계를 외부에서 주입하는 디자인 패턴입니다. IoC의 한 형태로 객체가 필요한 의존성을 직접 생성하지 않고 외부에서 주입받도록 합니다. DI유형으로 필드 주입, 세터주입, 생성자 주입이 있으며 스프링 프레임 워크에서는 생성자 주입을 추천합니다. 그 이유는 의존 객체를 불변 객체로 생성 가능하게 하고 순환 참조를 사전에 감지하며 의존 객체가 null이 되는 것을 방지 할 수 있기 때문입니다. IoC는 제어의 흐름을 역전시키는 원칙이라면, DI는 그 원칙을 실현하는 구체적인 방법이라고 볼 수 있습니다.
** IoC컨테이너 : IoC컨테이너는 객체의 생성, 구성, 생명 주기 관리 등을 담당하는 역할을 합니다. 스프링의 IoC 컨테이너는 어플리케이션의 설정정보를 바탕으로 객체를 생성하고, 의존성을 주입하며, 객체의 생명 주기를 관리합니다. IoC컨테이너의 장점은 객체간의 결합도를 낮추어 코드 변경 시 영향을 최소화하기에 유지보수성이 향상 될 수 있고 객체를 독립적으로 설계할 수 있어 재사용성이 높아진다는 점이 있습니다.
- 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요?
- 객체지향 프로그래밍(OOP)이란 현실 세계의 사물을 모델링하여 소프트웨어를 개발하는 프로그래밍 패러다임을 의미합니다. 핵심 개념으로 클래스와 객체(객체의 템플릿/인스턴스), 상속(하위 클래스가 상위클래스 특성을 물려받음), 다형성(같은 이름의 메서드가 다양한 형태로 동작 가능), 캡슐화(데이터와 메서드를 하나로 묶어 외부 접근을 제어)가 있으며 클래스와 객체는 현실 세계의 객체를 모델링하여 클래스로 설계하는 부분에서 다양한 상황에서 활용 될 수 있습니다. 예를 들어 상품이라는 클래스를 만들어 상품에 대한 속성(이름, 가격 등), 메서드(가격 변경, 재고 업데이트 등)를 정의할 수 있고 상속을 통해서 기본 차량클래스를 만들었다면 기본차량 클래스를 상속받은 특정차량 클래스는 기본 차량의 특성과 메서드를 물려받으므로써 코드의 재사용성과 확장성이 높아질 수 있고, 다형성은 기본 캐릭터 클래스에서 오버라이드를 통해서 특정캐릭터 하위클래스에서 해당 메서드를 다르게 구현하여 유연한 코드를 작성할 수 있습니다. 그리고 캡슐화를 통해서 클래스에 정의한 속성과 메서드에 대한 외부접근을 제한하여 데이터 보호 및 모듈화를 할 수 있습니다.
클래스와 객체, 상속, 다형성, 캡슐화를 통해 코드 재사용성 향상 ,유연성과 확장성 증대, 유지보수 용이, 대규모 프로젝트 관리 효율성이 장점이라고 할 수 있습니다.
대용량 트래픽 발생 시 어떻게 대응해야 하나요?
ORM을 사용하면서 쿼리가 복잡해지는 경우에는 어떻게 해결하는게 좋을까요?
GET, POST의 개념과 함께 데이터 흐름에 대해서 설명해주세요.
OSI 7계층에 대해 아는대로 설명해주세요.
세션 기반 인증과 토큰 기반 인증의 차이에 대해 설명해주세요.
JWT, Refresh, Access Token에 대해서 설명해주세요.
OAuth에 대해서 설명해주세요.
클래스형과 함수형의 차이를 설명해주세요. 어떤 방식을 주로 사용하였고 그 이유가 뭔지 답변해주세요.
CI/CD에 대해서 설명해주세요.
TDD에 대해서 설명해주세요.
프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요.
멀티프로세스와 멀티쓰레드의 특징에 대해 설명해주세요.
쿼리 최적화에 대해 설명해주시고 방법에 대해 설명해주세요.
DB 로직 최소화를 하려면 어떻게 해야 할까요?
테스트코드에 대해서 아는대로 설명해주시고 활용 경험에 대해서 답변해주세요.
Array, LinkedList에 대해 설명해주시고 각각 어떻게 사용하는지 말씀해주세요.
AWS S3, EC2를 사용하는 이유와 사용 경험에 대해서 답변해주세요.
정렬 알고리즘에 대해서 아는대로 설명해주세요.
Array, LinkedList에 대해 설명해주시고 각각 어떻게 사용하는지 말씀해주세요.
AWS S3, EC2를 사용하는 이유와 사용 경험에 대해서 답변해주세요.
정렬 알고리즘에 대해서 아는대로 설명해주세요. –>