1. 클래스란? → 특정 타입의 객체를 만들기 위한 템플릿(청사진)
  2. 객체란? → 생명주기가 있으며 상태와 동작을 가진 실세계의 추상화
  3. 추상화란? → 관련있는 내용만 노출하고 나머지 세부 내용은 숨기는 개념. 인터페이스와 추상클래스로 구현
  4. 캡슐화란? → 상태를 외부로부터 숨기고 메서드만을 이용하는 개념
  5. 상속이란? → 부모-자녀 관계(Is-A)로써 클래스의 계층 정의
  6. 다형성이란? → 상황에 따라 객체가 다르게 동작있게 하는 개념.
    1. 컴파일 타임 다형성: 메서드 오버로딩
    2. 런타임 다형성: 메서드 오버라이드
  7. 연관(association): 서로 독립적인 클래스 간의 관계. 소유자가 없다
    1. 구성(composition): 단방향 연관 관계의 좀 더 집약적인 특별한 경우
      1. Has-A 중 한가지로써 단독으로 존재할 수 없는 객체의 관계
  8. Type-Casting
    1. Up-casting : 자손 타입을 조상 타입으로 형(type)을 변환하는 것.
      1. 자바 함수 리턴 타입에서는 변환이 불가능하다
      2. 자바 함수 파라미터 타입에서는 변환이 가능하다
    2. Down-casting : 조상 타입을 자손 타입으로 형(type)을 변환 하는 것.
      1. 자바 함수 리턴 타입에서는 변환이 가능하다 → 단, 원래 형이 자손 타입이어야 한다
      2. 자바 함수 파라미터 타입에서는 변환이 불가능하다
  9. 오버라이딩(동적 바인딩): 같은 이름과 시그니쳐를 가지면서 다르게 동작하는 메서드를 작성하는 것
    1. 같은 클래스를 오버라이드 할 수 없음 → 서로 다른 클래스만 오버라이딩 가능
    2. private, static, final 메서드를 오버라이드 할 수 없음
    3. 더 상위 예외를 checked exception으로 발생 시킬 수 없음
    4. 하위 타입을 반환 가능
  10. 오버로딩(정적 바인딩): 같은 이름이지만 인자(parameter)가 다른 2개의 메서드를 작성하는 것
    1. 같은 클래스를 오버로딩 가능
    2. private, static, final 메서드 오버로딩이 가능
    3. 반환 타입이 다르다면 오버로딩으로 볼 수 없다 → 서로 다른 메서드임
  11. 메서드 하이딩: 슈퍼 클래스와 서브 클래스에서 동일한 static 메서드가 존재한다면 컴파일 타임에 결정된 클래스의 메서드를 호출하는 것
  12. interface의 default 메서드는 오버라이드가 가능하다 ↔︎ static은 안되나 직접 호출이 가능
  13. interface vs abstract: abstreact는 상태, 생성자를 가질 수 있으나 다중 상속이 불가능하다
  14. 자바의 private, final, static이 아닌 모든 메서드는 가상 메서드이다
  15. 에러와 예외의 차이
    1. 에러: 프로그램 코드에 의해 수습될 수 없는 심각한 오류
    2. 예외: 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
  16. DAO와 DTO,VO
    1. DAO : Data Access Object의 약자로 영속성 저장소 데이터 접근을 위한 객체이다.
      1. 데이터베이스에 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해서 사용한다.
      2. DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 객체를 말한다.
    2. DTO : Data Transfer Object의 약자로 계층 간 데이터 교환을 위한 객체를 말한다.
      1. 여기서의 계층이란 Business Layer, Persistent Layer 등을 말한다
      2. 함수를 가지지 않는다
    3. VO: read only 속성을 가지며 기본 타입의 필드 집합. 특정 타입을 표현하기 위한 용도로 사용된다.
      1. 비즈니스 로직과 관련된 함수를 가질 수 있다
  17. 뮤텍스와 세마포어
    1. 프로세스 혹은 쓰레드 간의 통신 시에 shared memory 등을 쓰는 경우 하나의 자원에 두 개 이상의 프로세스 혹은 쓰레드가 접근하는 경우에 문제(경합)가 발생. 이를 제어하기 위해 쓰레드에서는 뮤텍스를 사용하며, 프로세스에서는 세마포어를 사용 함
    2. 뮤텍스 : 상호 배제라고도 하며, Critical Section을 가진 스레드의 Running time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술 → synchronized 또는 lock을 통해 해결
    3. 세마포어 : 리소스 상태를 나타내는 간단한 카운터. 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용할 수 있음.
  18. MVC1과 MVC2 패턴의 차이를 설명해 주세요.
    1. MVC1 : controller + model in JSP
    2. MVC2 : controller + Model + View 분리되어있음.
  19. 정렬 알고리즘 중 가장 빠른 방식은 무엇인가요? 그 알고리즘에 대해 설명해 주세요.
    1. 상황에 따라 다르나, 일반적으로 일부 정렬된 실제 데이터 array에 대해서는 삽입 정렬이 가장 빠르다.
    2. 안정 정렬 : 팀(Tim) 소트
    3. 비 안정 정렬 : 더블 피봇 퀵 소트
  20. 바이너리 서치 트리(Binary Search Tree)에서 2개의 노드(node)를 임의로 스왑(swap)했을 때, 그 노드는 어떻게 찾아야 할까요? → 왼쪽 값이 오른쪽 노드보다 큰 노드를 찾으면 된다.