[Interview] 면접준비 - 공통사항

Kim Hyen Su·2024년 10월 28일

면접질문

목록 보기
14/27
post-thumbnail

공통사항

참고 : https://mangkyu.tistory.com/88

💡 OOP란

객체 중심의 프로그래밍 기법으로, 객체 간의 상호작용을 통해 요구사항에 적합한 기능을 프로그래밍하는 것을 의미한다.

💡 OOP의 5가지 설계 원칙

  1. 단일 책임 원칙(SRP) : 하나의 클래스에는 하나의 책임만 가져야 하며, 이를 변경하는 이유가 단 하나의 이유여야 하는 것을 의마한다. 일례로 회원가입에 관련된 기능을 수정하기 위해서는 회원 관련 기능을 정의한 회원 서비스 클래스에서 수정해야 한다.

  2. 개방 폐쇠 원칙(OCP) : 확장에는 열려있고, 수정에는 닫혀있어야 함을 의미한다. 일례로, 필요에 의해 의존 주입 시 구체적인 구현체 보다는 추상화 계층을 정의해야, 확장된 기능의 클래스를 도입하더라도 의존을 주입한 곳에서 수정이 이뤄지지 않는다.

  3. 리스코프의치환원칙(LSP) : 상위 계층의 클래스는 하위 계층의 클래스로 대체가 가능해야 한다. 즉, 하위 계층에서는 상위 계층을 포함하도록 기능이 구현되어 있어야 한다. 일례로, 동물이라는 계층에 동작하다라는 기능은 하위 사람이라는 계층에서는 모두 동작하다라는 기능이 가능하며, 이는 LSP 원칙을 잘 지킨 사례이다.

  4. 인터페이스분리원칙(ISP) : 클라이언트는 이용하지 않는 메소드에 의존하지 않도록 인터페이스를 분리해줘야 한다. 일례로, 수영을 하지 못하는 사람은 "수영할 수 있는" 이라는 기능을 구현해서는 안되며, 이는 ISP를 잘 지킨 사례이다.

  5. 의존역전원칙(DIP) : OCP와 깊은 연관이 있으며, 클라이언트는 추상화에 의존해야 하고, 구체화에 의존해서는 안된다.

💡 절차지향 프로그래밍 vs. 객체지향 프로그래밍

  • 절차지향 프로그래밍

    • 코드를 위에서부터 아래로 순차적으로 처리하는 것을 중요시하는 프로그래밍 기법이다.
    • 가장 대표적인 언어로 C언어가 있다.
  • 객체지향 프로그래밍

    • 객체 모델링을 하며, 객체 간의 상호작용을 통해 기능을 구현하는 프로그래밍 기법이다
    • 가장 대표적인 언어로 Java가 있으며, 절차지향 프로그래밍에 비해 상대적으로 속도가 느리다.

💡 RESTful API

REST API에서 REST는 REpresentational State Transfer의 약자로, 이를 해석하면 네트워크 상태가 전이되는 것에 대한 표현을 의미한다. REST API에서는 이를 표현하기 위한 수단으로 Resource, Method, Representation을 사용한다.

  • Resource (자원, URI)
  • Method (요청 방식, GET or POST)
  • Representation of Resource(자원의 형태, JSON or XML 등)

URL vs. URI _ 참고

  • URL : Uniform Resource Locator, 자원이 실존하는 위치.
  • URI : Uniform Resource Identifier, 자원의 위치뿐만 아니라 자원에 대한 고유 식별자를 포함한 의미.

💡 메모리 구조

  • 코드 영역 : 실행할 프로그램의 코드가 저장되는 영역.

    • 프로그램 실행 시 OS가 HDD에서 메모리 위로 실행 코드를 올리고, CPU에서 이를 처리한다.
  • 데이터 영역 : 프로그램의 전역 변수와 정적 변수가 저장되는 영역, 데이터는 프로그램의 시작과 함께 할당되며, 프로그램이 종료 시 소멸된다.

  • 힙 영역 : 프로그래머가 직접 관리가 가능한 메모리 영역으로 이 공간에 메모리를 할당하는 것을 동적 할당이라고 부른다. Java에서는 가비지 컬렉터가 이를 자동으로 관리해준다. 힙 영역은 스택 영역과 달리 낮은 주소에서 높은 주소로 메모리가 할당된다.

  • 스택 영역 : 함수의 호출과 함께 할당되며 지역 변수와 매개 변수가 저장되는 영역을 의미한다. 스택 영역 내 저장되는 함수의 호출 정보를 스택 프레임이라고 한다. 스택 영역은 함수 호출이 완료 시 소멸된다. 스택 영역은 높은 주소에서 낮은 주소로 메모리가 할당 된다.

💡 Call By Value와 Call By Reference

  • Call By Value

    • 인자로 받은 값을 복사하여 처리하는 방식
    • 원래 값에는 영향을 미치지 않는다.
    • 복사하여 사용하므로 메모리 사용량은 증가한다.
  • Call By Reference

    • 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 주는 방식
    • 값을 복사하지 않으므로 속도가 상대적으로 빠르다.

💡 라이브러리와 프레임워크 차이점

  • 라이브러리 : 사용자가 흐름에 대한 제어가 가능하며, 필요한 상황에 맞게 해당 기능을 가져다가 사용할 수 있다.

  • 프레임워크 : 전체적인 흐름을 자체적으로 제어한다.

결론적으로, 둘의 큰 차이점은 실행 흐름에 대한 제어권이 어디 있는지에 따라 다르다. 프레임워크를 사용하면 사용자가 관리할 내용을 프레임워크에게 넘겨주게 된다. 이 과정에서 IoC가 발생하게 된다.

💡 아스키 코드와 유니코드, EUC-KR과 UTF-8 차이점

  • 아스키 코드
    • 영문자를 사용하는 문자 인코딩 방식
    • 바이트로 표현되며, 8비트 중 1비트는 통신 에러 검출을 위한 용도로 사실상 7비트의 단위로 사요된다.
    • 128개 부호바에 표현할 수 없다.
  • EUC-KR
    • 아스키코드에는 미국에서 사용되는 숫자나 알파벳만 들어있기 때문에 한글과 같은 다른 문자체계는 표현이 불가능하다.
    • 나라들마다 문자열 표를 만들어서 사용했는데, 이 때 탄생한 것이 EUC-KR이다.
    • 1바이트의 아스키코드와 달리 EUC-KR은 2바이트로 구성된다.
    • 나라마다 다른 문자열 셋을 만들면 통일되지 않은 표현 방식에 의해 문제가 발생하여 유니코드가 등장함.
  • UTF-8
    • 전 세계 문자를 하나로 통합한 문자열셋인 유니코드를 만들었는데, UTF-8은 이 중 하나이다.
    • 유니코드는 1~4바이트로 인코딩하는 가변 크기 인코딩 방식으로, 사용 빈도가 높은 글자는 적은 공간을 차지한다.
    • UTF-16은 고정길이를 사용한다는 점과 바이트 순서에 따라 2가지 형식이 존재하다는 점에사 차이가 있다.

💡 동기와 비동기 차이점

  • 동기

    • 요청 후 실행이 끝나면 동작을 처리하는 방식
    • 순서에 따라 진행되어 제어가 쉽지만, 동기 처리 로직 중 일부의 성능저하가 전체 장애로 번질 수 있다는 단점이 있다.
  • 비동기

    • 요청을 보내고 해당 동작의 처리 여부와 상관없이 다음 요청이 동작하는 방식.
    • 일부 로직의 처리를 기다리지 않아도 되어 성능이 올라간다.
    • 작업 완료 처리에 대한 제어가 어렵다.
profile
백엔드 서버 엔지니어

0개의 댓글