++/CS

[TIL] CS공부 4일차

writtenbyrla 2024. 3. 8. 12:44

Java Map의 내부 구현은 어떻게 이루어져 있을지 추측해보실 수 있을까요?

Map은 기본적으로 key-value를 쌍으로 데이터를 저장하는 자료 구조로, 순서가 보장되지 않으며 key값의 중복은 불가능 합니다.

HashMap
key를 이용하여 key에 해당하는 value값을 빠르게 찾기 위해 사용됩니다.
해시 함수를 이용해 각 key를 index로 변환하고, index를 통해 bucket에 접근, 해당 index에 key와 value 값을 저장합니다.

TreeMap
이진 검색 트리 기반으로 구현되며 각 Node들이 연결된 형태로, 모든 key-value 쌍은 정렬되어 있어 범위 검색이나 정렬이 필요한 경우에는 TreeMap을 사용하는 것이 좋습니다.

LinkedHashMap
HashMap을 상속받아 LinkedList를 결합한 형태로, HashMap과 유사하지만 key의 순서를 보장한다는 차이점이 있습니다.

 

++ 이진검색트리
부모 노드와 자식 노드로 구성되어 있으며
key값을 기준으로 왼쪽 자식노드는 부모 노드보다 값이 작고, 오른쪽 자식노드는 부모 노드보다 값이 커야 합니다.
순차적으로 저장되는 것이 아니기 때문에 노드의 추가 및 삭제에 시간이 걸립니다.

 

++ Map 사용 경험

알고리즘을 공부할 때 두 문자열을 비교해서 특정 조건에 만족하는 문자가 몇번 나왔는지 카운팅하는 문제를 풀 때 사용해보았습니다.

일반 리스트 형태로 반복문을 이용해 카운팅을 하는 경우에는 중첩 for문을 써서 시간복잡도가 증가하기 때문에 key-value값 형태의 map 구조로 변환하여 value 자체에 카운트한 값을 넣어 반환하는 식으로 풀었습니다.

 

 

 

 


 

 

 

 

 

DIIoC에 대해 아는 만큼 설명해주실 수 있을까요?

의존성 주입 (Dependency Injection)
다른 객체에 대한 의존성을 직접 생성하지 않고 외부 컨테이너에서 생성한 후 주입하는 것을 말합니다.
만약 A 객체가 B와 C 객체를 의존하고 있다면 A 객체 내부에서 new 생성자를 이용해 직접 생성하지 않고, 외부에서 이미 생성된 B와 C객체를 주입한 후 setter나 생성자를 통해 사용할 수 있습니다.

제어의 역전 (Inversion of Control)
개발자가 아니라 스프링과 같은 프레임워크가 제어 흐름 권한을 가지는 것을 뜻합니다. 주로 의존성 주입 개념과 함께 사용되며 객체의 의존성을 역전시켜 객체간 결합도를 낮추고 유연성을 높여 코드를 재사용하고 유지보수하기 쉽게 만듭니다.

 

++ 컨테이너란?

개발자가 작성한 코드를 처리하도록 위임받은 독립된 존재로, 컨테이너 스스로 객체의 생성과 소멸을 컨트롤합니다. 

 

++ 프로젝트에 적용해 본 경험?

Service 계층에서 비즈니스 로직을 처리하기 위해 데이터 액세스 객체인 DAO(Repository)가 필요합니다. 따라서 생성자를 통해 Repository 인터페이스를 주입하여 Service 계층에서 별도로 Repository를 생성하지 않아도 사용가능 하도록 하였습니다.

또한 Repository나 Service 계층에서 상단에 @Repository @Service 어노테이션을 이용하여 객체의 생성과 관리 책임을 IoC 컨테이너에 위임하도록 하였습니다.

 

 


 

 

 

 

 

 

MVC 모델이란 무엇인지 설명해주실 수 있을까요?

디자인 패턴 중 하나로 세 가지의 역할을 구분하여 애플리케이션의 유지보수성과 확장성을 향상시킵니다.
MVC 패턴은 아래와 같이 구성됩니다.

모델(Model)
데이터와 데이터를 처리하는 로직을 뜻합니다.

뷰(View)
사용자에게 보여지는 영역으로, 모델에 저장한 데이터를 표시하는 역할을 합니다.

컨트롤러(Controller)
모델과 뷰 사이에서 사용자의 요청을 처리하는 역할을 합니다.

 

++ MVC 패턴을 프로젝트에 적용했었는지, 예시를 들어서 설명해주세요.

이전에 spring을 처음 학습할 때 jsp를 사용하면서 MVC 패턴을 이용한 적이 있습니다.

또, 최근에 한 프로젝트가 rest api 방식이었지만 템플릿 엔진을 이용하여 간단하게 뷰 작업을 했기 때문에, 페이지 이동하는 작업을 일반 Controller로 분리하여 뷰에 반환할 데이터를 model을 이용하여 보내기도 하였습니다.

 

++ MVC 디자인패턴에서 HTTP 요청 처리 과정은 어떻게 이루어지는지 설명해주세요. 

1. 클라이언트가 HTTP 요청합니다.

2. 웹 서버는 이 요청을 DispatchServlet으로 보내고, DispatchServlet은 요청에 대한 핸들러 매핑(Handler Mapping)을 통해 어떤 Controller가 이 요청을 처리할지 결정하여 호출합니다.

3. 호출받은 Controller는 데이터 검색이나 비즈니스 로직, 데이터를 가져오는 작업을 포함하며 요청에 따라 작업을 수행하거나 데이터베이스를 업데이트 합니다.

4. 클라이언트에 반환될 뷰를 선택하여 모델과 함께 데이터를 전달하며 랜더링하여 HTTP 응답을 반환합니다.

 

++ dispatchServlet은 무엇인가요?

Java 기반 웹 애플리케이션 프레임워크에서 애플리케이션의 요청 처리 흐름을 제어하는 중요한 구성 요소 중 하나로 , 클라이언트로부터의 HTTP 요청을 받아서 적절한 핸들러(Controller)로 요청을 보내는 역할을 합니다.

 

 

 

참고자료

https://velog.io/@gillog/Spring-DIDependency-Injection

https://leveloper.tistory.com/33

https://galid1.tistory.com/493?category=769011

https://m.blog.naver.com/jhc9639/220967034588

'++ > CS' 카테고리의 다른 글

[TIL] CS공부 6일차  (0) 2024.03.11
[TIL] CS공부 5일차  (0) 2024.03.09
[TIL] CS공부 3일차  (0) 2024.03.07
[TIL] CS공부 2일차  (0) 2024.03.06
[TIL] CS공부 1일차  (0) 2024.03.05