Tech Interview

기술 면접 스터디
Tech Interview/Language

[Language] DAO vs DTO

✔️ DAO vs DTO DAO(Data Access Object)란? DB의 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 객체 DB에 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해서 사용 DTO(Data Transfer Object)란? 계층(Controller, View, Business, Persistent Layer) 간 데이터 교환을 위한 자바빈즈 일반적인 DTO는 로직을 갖고 있지 않는 순수한 데이터 객체이며, 속성과 그 속성에 접근하기 위한 getter, setter 메소드만을 가진 클래스 read only 속성을 가지는 VO(Value Object)라고도 불림

Tech Interview/Language

[Language] POJO

✔️ POJO POJO(Plain Old Java Object, 평범한 구식 자바 객체)란? 프레임워크 인터페이스나 클래스를 구현하거나 확장하지 않는 단순한 클래스 즉, Java로 생성하는 순수한 객체 EJB(Enterprise JavaBean)는 로우 레벨의 기술들에 관심을 가질 필요도 없이 쉽게 애플리케이션을 만들 수 있다는 비전을 가졌지만 불필요할만큼 과도한 엔지니어링으로 객체지향적인 특징과 장점을 포기하는 실패 케이스가 됨 그러므로 EJB와 같은 잘못 설계된 과도한 기술을 피하고 객체지향 원리에 따라 만들어진 자바 언어의 기본에 충실하게 비즈니스 로직을 구현하는 POJO 방식으로 돌아서야 함 POJO 방식은 Java에서 제공하는 API 외에는 종속하지 않으므로 특정 규약과 환경에 종속되지 않아 코..

Tech Interview/Language

[Language] AOP

✔️ AOP AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)란? 어떤 로직을 기준으로 핵심 관점과 부가 관점을 나누고, 관점을 기준으로 모듈화하는 것 핵심 관점은 주로 핵심 비즈니스 로직을 뜻하며 부가 관점은 핵심 로직을 실행하기 위한 데이터베이스 연결, 로깅, 파일 입출력 등을 뜻함 AOP를 통해 소스 코드에서 여러 번 반복해서 쓰는 코드를 모듈화하여 핵심 로직에서 분리 및 재사용하도록 해 개발자는 핵심 로직에 집중할 수 있음 스프링 AOP의 경우 프록시 패턴 기반 AOP 구현체의 특징을 가짐 Target 객체에 대한 프록시를 만들어 제공하여 접근 제어 및 부가 기능 추가를 위해 프록시 객체를 사용하게 됨 Target을 감싸는 프록시는 런타임 시 생성되게 되고 프록시는..

Tech Interview/Language

[Language] DI

✔️ DI DI(Dependency Injection, 의존성 주입)란? 스프링 프레임워크에서 지원하는 IoC의 형태 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해줌 개발자들은 제어를 담당할 필요 없이 빈 설정 파일에 의존관계가 필요하다는 정보만 추가해주면 컨테이너가 실행 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입하게 됨 현재 객체가 다른 객체와 상호작용하기 위해 의존할 경우 하나의 모듈이 바뀌면 다른 모듈까지 변경해야 하며, 의존성으로 인한 유닛 테스트 작성이 어려움 그러므로 객체 생성은 다른 곳에서 하고, 생성된 객체를 참조하는 의존성 주입을 하도록 함 DI를 통해 클래스를 재사용할 가능성을 높이고, 다른 클래스와 독립적으로 클래스를 테스트할 수 있음 그러..

Tech Interview/Language

[Language] 스프링 MVC

✔️ 스프링 MVC MVC 패턴이란? 디자인 패턴이란 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리하고 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 규약을 통해 쉽게 쓸 수 있는 형태로 만든 것 MVC 패턴은 디자인 패턴 중 하나 Model, View, Controller의 약자로 하나의 애플리케이션, 프로젝트를 구성할 때 구성요소를 세 가지의 역할로 구분한 패턴 Model : 애플리케이션의 정보, 데이터들의 가공을 책임지는 컴포넌트 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 함 뷰나 컨트롤러에 대해서는 어떤 정보도 알지 말아야 함 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야 함 모델은 재사용 가능해야 하며 다른 인터페이스에서도 변하지 않아..

Tech Interview/Language

[Language] IoC

✔️ IoC IoC(Inversion of Control, 제어의 역전)란? 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐 것을 의미 또는 제어 권한을 자신이 아닌 다른 대상에게 위임하는 것 대부분의 프레임워크에서는 IoC를 사용해 개발자가 프레임워크에 필요한 부품을 개발하고 조립하는 식으로 개발하게 됨 조립된 코드의 최종 호출은 개발자에 의해서 제어되는 것이 아니라 프레임워크의 내부에서 결정된 대로 이루어지는 제어의 역전 현상이 일어나게 됨 프레임워크는 애플리케이션 코드가 프레임워크에 의해 사용되며 프레임워크 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션 코드가 사용되게 됨 반면 라이브러리는 애플리케이션 코드가 애플리케이션 흐름을..

Tech Interview/Language

[Language] Container

✔️ Container Container란? 스프링 프레임워크의 핵심 컴포넌트 내부에 존재하는 빈의 생명주기(생성, 관리, 제거)를 관리하며 생성된 빈들에게 추가적인 기능을 제공하도록 함 컨테이너를 사용해 객체 간의 의존성을 낮추어 결합도를 낮추고, 높은 캡슐화를 위해 스프링 컨테이너가 사용되게 됨 스프링 프레임워크는 IoC 패턴을 통해 컨테이너 기능을 제공함 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트인 BeanFactory와 빈 팩토리를 좀 더 확장한 ApplicationContext가 존재

Tech Interview/Language

[Language] Bean

✔️ Bean Bean이란? 컨테이너 안에 들어 있는 객체 컨테이너에 담겨 있으며, 필요할 때 컨테이너에서 가져와서 사용함 @Bean을 사용하거나 xml 설정을 통해 일반 객체를 Bean으로 등록할 수 있고, Bean으로 등록된 객체는 쉽게 주입하여 사용 가능함 Bean 생명주기 객체 생성 - 의존 설정 - 초기화 - 사용 - 소멸 스프링 컨테이너에 의해 생명주기가 관리 스프링 컨테이너 초기화 시 빈 객체가 생성되고, 의존 객체 주입 및 초기화하게 됨 스프링 컨테이너 종료 시 빈 객체가 소멸하게 됨 Bean 초기화 방법 빈 정의 xml에 를 추가한 후 빈 초기화 메소드에 @PostConstruct 어노테이션 사용 InitializingBean 인터페이스의 afterPropertiesSet() 메소드를 오..