기본 CS 질문
HashTable 은 무엇인가요?
해시함수를 사용하여 변환된 값을 인덱스로 삼아 키와 값을 저장하는 자료구조를 말한다.
해시테이블의 중점사항은 충돌을 완화하는 것이다.
HashTable과 HashMap의 차이점은 무엇일까요?
HashTable 은 동기화를 지원하여 멀티스레드 환경에서 사용하기 좋다.
하지만 HashMap에 비해 느리다.
Key, Value에 null이 들어갈 수 없다.
HashMap은 싱글스레드 환경에서 사용하기 좋다.
Key, Value에 null이 들어갈 수 있다.
큐란 무엇인가요?
큐는 먼저 들어온 데이터가 먼저 나가는 구조로, 선입선출이라고 한다.
뒤에서 새로운 데이터가 추가되고 앞에서 데이터가 하나씩 삭제되는 구조를 가지고 있다.
그래프란 무엇인가요? 트리와의 차이점은 무엇인가요?
그래프는 정점노드와 정점을 연결하는 간선으로 구성된 자료구조이다.
계층이 없는 네트워크 모델이다.
트리는 그래프의 종류 중 하나로, 노드와 간선으로 이뤄진 비선형 자료구조이다.
루트 노드가 존재하고, 부모-자식 관계로 이뤄진 계층적인 모델이다.
노드와 노드는 단 하나의 간선으로 연결되어 있고, 싸이클이 존재하지 않는다.
우선순위 큐란 무엇인가요?
우선순위를 가진 데이터들을 저장하는 큐를 의미한다.
데이터를 꺼낼 때 우선 순위가 높은 데이터가 가장 먼저 나온다는 특징을 가지고 있다.
일반적으로 힙(Heap)을 사용하여 구현한다.
힙이란 무엇인가요?
완전 이진 트리의 일종으로 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다.
완전 이진트리 : 각 노드가 최대 2개의 자식 노드를 갖는 트리 형태의 자료구조이다. 노드를 삽입할 때 최하단 좌측 노드부터 차례대로 삽입해야한다.
종류는 최대 힙과 최소 힙 두가지가 있다.
OOP란 무엇인가?
객체지향프로그래밍으로 특징 4가지가 있다.
- 추상화 : 목적과 관련이 없는 부분을 제외해서 필요한 부분을 포착하는 기법이다. 구체적인 사물의 공통적인 특징을 파악해서 이를 하나의 개념으로 다루는 것이다.
- 캡슐화 : 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것을 의미한다. 캡슐화의 목적은 정보의 은닉에 있다. 필요가 없는 정보는 외부에서 접근하지 못하도록 제한한다.
- 상속화 : 부모 클래스가 자손 클래스에게 속성을 물려주는 것으로 코드의 재사용을 용이하게 한다.
- 다형성 : 같은 형태이지만 다른 기능을 하는 것으로 오버라이딩과 오버로딩으로 다형성의 개념을 말 할 수 있다.
오버라이딩 : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재 정의해서 사용
오버로딩 : 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
SOLID란 무엇인가?
- 단일 책임 원칙 (SRP) : 한 클래스는 하나의 책임만 가져야 한다.
- 개방 폐쇄 원칙 (OCP) : 소프트웨어는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다.
- 리스코프 치환 원칙 (LSP) : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- 인터페이스 분리 원칙 (ISP) : 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
- 의존관계 역전 원칙 (DIP) : 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법중 하나다.
오버로딩과 오버라이딩은 무엇인가?
오버라이딩 : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재 정의해서 사용
오버로딩 : 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
Abstract란 무엇인가?
상속을 강제하는 일종의 규제로 볼 수 있다.
추상 메소드가 포함된 추상 클래스를 상속 받은 모든 자식 클래스는 추상메소드를 구현해야만 인스턴스를 생성할 수 있음으로 반드시 구현하게 된다.
Static이란 무엇인가?
메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다.
일반적으로 우리가 만든 Class는 Static 영역에 생성되고, new 연산을 통해 생성된 객체는 Heap영역에 생성된다.
Heap영역의 메모리는 Garbage Collector를 통해 수시로 관리를 받는다.
하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만, GC의 관리 영역 밖에 존재하므로 Static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재하므로 자주 사용하게 되면 시스템 퍼포먼스에 악영향을 주게 된다.
추상 클래스와 인터페이스의 차이점은 무엇인가?
추상클래스와 인터페이스 둘 다 메소드를 구현하도록 강제하는데, 추상클래스는 상속 받아서 기능을 이용하고 확장시키는데 목적이 있다면, 인터페이스는 정의된 메소드를 각 클래스의 목적에 맞게 기능을 구현시키는데에 목적이 있다.