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