본문 바로가기

면접 스터디

객체의 가시성 수정자는 어떻게 작동하는가? - 가시성 수정자(visibility modifier) 는 클래스의 캡슐화된 상태와 인스턴스 행동을 조정하는 메서드의 접근을 제어하는 역할. - 가시성 수정자 범위 Least private 같은 클래스의 모든 인스턴스 접근가능 하위 클래스 접근 불가능 같은 패키지의 모든 클래스에서 접근 가능 protected 모든 하위 클래스에서 접근 가능 Most public 어디서든 접근가능 - pirvate의 일반적이 ㄴ오해는 private으로 선언한 변수는 해당 인스턴스에만 접근할 수 있다고 생각하는 것. - 실제로 같은 타입의 다른 모든 인스턴스가 private 멤버 변수에 접근할 수 있다. - 책 8-7 코드는 같은 타입이지만 다른 인스턴스에서 private 멤버 변수에 접근하는 두 가지 경우를 보여주는 예다. 더보기
final 키워드는 객체 참조에 어떤 영향을 미치는가? - 객체의 선언하는 final 키워드는 원시 타입에 선언하는 final 키워드와 동일한 역할을 한다. - 변수 정의에서 지정된 값처럼 일단 할당이 되고 나면 메모리 위치가 변경되지 않는다. - 객체 참조는 변경할 수 없어도 객체 내부의 값들은 개별 값들은 개별 값들이 final 이 아니라면 변경 가능하다. @Test public void finalReferenceChanges() { final int i = 42; //i= 43; 주석 해제시 컴파일 에러 final List list = new ArrayList(20); //list = new ArrayList(50); 주석 해제 시 컴파일 에러 assertEquals(0, list.size()); list.add("adding a new value in.. 더보기
자바에서 객체란 무엇인가? - 객체는 변수들의 컬렉션으로 정의할 수 있다. - 객체에는 상태와 행위가 있다고 생각하면 이해하기 쉽다. - 원시 타입을 제외하면 자바 언어의 다른 모든 변수들은 참조 타입 이다. 원시 타입과 다른점은 빈 객체를 의미하는 null 이 존재한다는 것이다. 참조 타입의 의미 - 원시 타입은 int i = 42 변수가 선언되었을때 42라는 값이 메모리에 할당 되고 int j = i라는 형식으로 i에의해 표현되는 값이 할당되었을 때 메모리의 다른 위치에 같은 값을 할당한다. - 할당되고 나면 i는 j 값에 영향을 미칠 수 없다. - 자바에서 new ArrayList(20) 같은 구문은 데이터를 저장하는데 필요한 영역을 메모리에 요구 - List myList = new ArrayList(20) 구문으로 생성된 .. 더보기
왜 Integer.MIN_VALUES에 대응하는 양수가 없는가? - short, int, long 타입의 2진수 값 저장소는 메모리에서 2의 보수 값을 사용한다. - 2의 보수 표현에서 양수에 대응하는 음수는 2진수 기반의 NOT 비트 연산을 적용한다. - 2의 보수 표현을 사용하는 주된 이유는 0은 하나의 값만 존재, 즉 양수나 음수의 개념이 없다. 일부 음수의 2진수 표현 10진수 표현 2진수 표현 -1 1111 1111 -2 1111 1110 .... -127 10000 0001 -128 10000 0000 - 저장할 수 있는 가장 작은 음수의 최상위 비트가 1이고 나머지는 0이다. - 이 값을 음수화 하려면 나머지 비트를 뒤집으면 (0111 1111) 되고 원래 값으로 돌리려면 하나(1000 0000)를 더하면 된다. - 이런 경우 해당하는 양수는 존재하지 않.. 더보기
몇 가지 자바 원시 타입의 이름을 지정하고 이 타입이 JVM에서 어떻게 처리되는지 설명 - boolean, int, double 같은 각각의 기본 타입은 원시(primitive)타입이라고 알려져 있다. - JVM에서 객체와 다른 방식으로 다룬다. 왜냐하면 원시 타입은 NULL이 될 수 없기 때문 - int와 long floaf와 double을 구분할수 있어야 한다. long은 L float는 F, double은 D 로 정의 한다. 원시 타입의 종류와 크기 타입 크기 boolean 1 short 16 int 32 long 64 float 32 double 64 char 16 - char 타입이 unsighed 이고 char 값의 범위는 유니코드 값이므로 0에서 65,535 까지다. - 원시 타입을 정의할 때 값이 할당되지 않았다면 그 변수는 기본적으로 기본값이 지정된다. 상위 개념 타입으로 .. 더보기
빌더 패턴은 얼마나 유용한가? - 필드가 많은 객체를 생성할 경우 생성자를 이용하면 다루기도 어렵고 헷갈릿 수 있다,private final Animal animal; private final String petName; private final String ownerName; private final String address; private final String telephone; private final Date dateOfBirth; private final String emailAddress; - 유효한 Pet 객체를 만들려면 필요한 모든 필드와 조합할 수 있는 옵션 필드를 포함하도록 많은 매개변수를 갖는 생성자가 최소한 4개는 필요하다. - 이러한 문제를 해결하는 한 가지 방법은 생성자를 사용하지 않는 것. - 필드에서 .. 더보기
맵 Map - 맵은 해시라고도 하며 배열이나 사전(dictionary)과 관련 잇는 키-값 형태의 저장소. - 맵을 구현할 때는 Map 인터페이스를 사용한다. - List 인터페이솨 달리 Collection 인터페이스를 구현하지 않는다는 차이가 있다, - 맵의 특징 중 하나는 키 값은 트리 상에서 한 번만 나타난다는 것. 맵에서 키를 덮어 쓰는 예 - HashMap 클래스는 해시 테이블을 자바로 구현한 것으로, 클래스 구현에는 키-값 쌍을 나타내는 Entry라는 내부 클래스가 있다. - 원소들은 Entry 객체의 배열로 저장할 수도 있고 배열 대신 Entry 객체의 리스트로 저장할 수도 있다. - 이렇게 저장된 원소의 특정 키 인스턴스의 값은 테이블의 어디에 해당 값이 있는지 정의 - Object 클래스에 정의된 .. 더보기
이진 탐색 트리 트리란? - 트리는 비선형 자료구조 중에서 자료들 간에 계층관계를 가진 계층형 자료구조다. - 트리를 구성하는 원소를 노드라고 하고 노드를 연견하는 선을 간선(edeg)이라 한다. - A에는 12개의 노드가 있다. - 트리 시작을 루트노드라 하고 레벨 0이 된다. - 같은 부모의 자식 노드들은 서로 형제노드 (Sibling Node)가 된다. - 자식노드들은 각각 독립하여 새로운 트리를 구성할 수 있으므로 각 노드는 자식노드 수만큼의 서브트리를 갖는다. - 한 노드가 가지는 서브 트리의 수, 즉 자식노드의 수를 그 노드의 차수(degree)라 한다. - 차수가 0인 노드 즉 자식이 없는 노드를 리프 노드(Leaf Node) 또는 단말 노드라 한다. - 여러 트리들의 집합을 포리스트라고 한다. 이진 탐색 .. 더보기
Deque(Double-ended Queue) 데큐는 큐의 양쪽 끝에서 삽입과 삭제가 모두 발생할 수 있는 큐로서 스택의 설질과 큐의 성질 모두 가지고 있는 자료조 - 덱의 insertFront() 연산과 deleteFront()연산은 front를 스택에 top으로 생각했을 때 스택의 push()연산과, pop()연산과 같다. - 덱의 insertRear() 연산과deleteRear()연산은 rear를 스택에 top으로 각했을때 스택의 push()연산과, pop()연산과 같다. - 덱의 insertRear()연산과 deleteFront()연산은 일반 큐의 enQueue()연산, deQueue()연산과 같다. 연산 수행에 대한 덱의 상태 public class DQNode { char data; DQNode rlink; DQNode llink; }pu.. 더보기
연결 큐 순차 자료구조 방식에는 몇가지 문제가 있다. - 사용 크기가 제한되어 있어서 큐의 길이를 마음대로 변경할 수 없다. - 원소가 없을 때에도 항상 처음 크기를 유지하고 있어야 하므로 메모리도 낭비 된다. 연결큐의 알고리즘 1. 공백 연결 큐 생성createLinkedQueue() fornt 더보기