CS

[항해 취업코스] 개발자 취준 기록 4일차

Ynghan 2024. 3. 8. 16:36

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

A.

Java의 Map 인터페이스는 주요한 구현체로 HashMap, TreeMap, LinkedHashMap 등이 있습니다. 이들의 내부 구현은 약간씩 다릅니다.

HashMap의 경우, 배열과 연결 리스트, 그리고 Java 8 이후에는 트리도 사용하여 데이터를 저장합니다. 키와 값이 쌍으로 이루어진 엔트리를 배열의 인덱스에 매핑하고, 해싱 충돌이 발생할 경우 연결 리스트 또는 트리를 사용해 충돌을 관리합니다.

TreeMap은 레드-블랙 트리라는 자료 구조를 사용하여 키-값 쌍을 저장합니다. 이를 통해 키를 기준으로 정렬된 순서를 유지하며, 검색, 삽입, 삭제 연산을 로그 시간에 할 수 있습니다.

LinkedHashMap은 HashMap과 링크드 리스트를 결합한 형태로, 삽입 순서 또는 접근 순서에 따라 엔트리를 저장합니다.


Q. DI와 IoC에 대해 아는 만큼 설명해주실 수 있을까요?

A.

'제어의 역전(IoC, Inversion of Control)'은 프로그램의 제어 흐름 구조가 뒤바뀌는 것을 말합니다. 일반적으로 프로그램의 흐름은 개발자가 만든 메인 프로그램이 전반적인 제어를 담당하며, 필요에 따라서 개발자가 만든 모듈을 사용합니다. 하지만 IoC를 사용하면 프레임워크나 컨테이너가 주도권을 가지고, 개발자가 작성한 코드를 호출합니다. 이렇게 되면 개발자는 비즈니스 로직에만 집중할 수 있게 됩니다.

'의존성 주입(DI, Dependency Injection)'은 이 IoC를 구현하는 방법 중 하나입니다. DI는 객체가 작동하는데 필요한 의존성을 객체가 스스로 찾거나 만들지 않고, 외부에서 주입하는 패턴을 말합니다. 이를 통해 각 객체는 자신의 의존성을 명확히 알 수 있고, 이 의존성을 외부에서 설정하므로 재사용 및 교체가 용이해집니다. 또한 테스트가 쉬워지는 장점도 있습니다.

결론적으로, IoC와 DI는 소프트웨어 공학에서 코드의 품질을 높이고 유지 보수를 용이하게 하는 중요한 원칙 및 패턴입니다. 이를 이해하고 적용함으로써 더 효율적이고 유연한 코드를 작성할 수 있습니다.


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

A.

MVC가 생겨나기 전, 과거의 프로그래머들이 수많은 프로그램을 만들었습니다. 코드가 많아질수록 코드가 복잡해져 코드를 파악하기도 힘들어지고 기능을 수정할 때마다 대부분의 코드를 갈아엎어야 하는 경우가 많았습니다. 유지보수가 매우 힘들었습니다. 개발자들은 경험을 통해 유지보수가 용이한 패턴의 규칙성을 찾기 시작했습니다. 그러한 패턴을 공식화해서 많은 개발자들이 이를 사용하기 시작했다. 즉, MVC는 유지보수가 편해지는 코드 구성 방식입니다.

MVC 모델이란 소프트웨어 개발에 있어 유지보수가 용이한 코드 구성 방식을 말합니다. 이는 Model, View, Controller의 세 가지 요소로 나누어져 있습니다.

Model은 데이터와 관련된 모든 작업을 담당하는데, 이는 데이터베이스에 직접 접근하거나 데이터를 처리하는 등의 역할입니다.

View는 사용자에게 보여지는 부분을 담당합니다. 이는 사용자 인터페이스와 관련된 모든 것을 포함합니다.

Controller는 Model과 View를 연결하는 다리 역할을 합니다. 사용자의 요청을 받아 Model에게 데이터를 요청하고, 그 데이터를 View에게 전달하여 사용자에게 보여주는 역할을 담당합니다.

MVC 모델을 유지하기 위한 규칙은 다음과 같습니다:

  1. Model은 Controller와 View와 관련된 코드를 포함하면 안 됩니다.
  2. View는 Model의 코드만 포함할 수 있으며, Controller의 코드는 포함하면 안 됩니다.
  3. View가 Model로부터 데이터를 받을 때는 사용자마다 다르게 보여줘야 하는 데이터만 받아야 합니다.
  4. Controller는 Model과 View에 의존할 수 있습니다.
  5. View가 Model로부터 데이터를 받을 때는 반드시 Controller를 통해 받아야 합니다.

이러한 규칙을 준수하면서 개발하면, 코드의 유지보수가 용이해지고, 각 요소의 역할 분리를 통해 코드의 구조가 명확해집니다.