## Java 관련 질문 ##
1. 자바의 데이터 타입인 Primitive Type과 Reference Type에 대해 설명하세요
Primitive Type은 변수에 값 자체를 저장하며 Reference Type은 메모리상에 객체가
있는 위치를 저장한다.
Primitive Type의 종류는 boolean, byte, char, short, int, float, long, double 총 8가지 이며
Reference Type 종류는 클래스타입, 인터페이스타입, 배열타입, 열거타입이 있다.
+++ 김윤명저 뇌를 자극하는 Java 프로그래밍 참고 +++
2. 다형성이란 무엇인가?
여러가지 데이터를 다룰 수 있는 특성을 뜻한다.
조상클래스의 인스턴스를 이용하여 자손타입의 클래스를 다룬다거나, 메서드 오버로딩을 통하여
동일 이름의 메서드를 이용하여 다양한 형태의 파라미터를 다루는 것을 뜻한다.
3. 멀티 쓰레드의 장단점은 무엇인가?
두 가지 이상의 작업을 동시해 실행 할 수 있어 자원을 효율적으로 이용할 수 있으나
dead lock 및 동기화에 대한 철저한 검증이 필요하다.
4. Java 콜렉션의 대표 인터페이스는 무엇인가?
List - 순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.
구현클래스 - ArrayList, LinkedList, Stack, Vector
Set - 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.
구현클래스 - HashSet, TreeSet
Map - 키와 값의 쌍으로 이루어진 데이터의 집합으로 순서는 유지되지 않으며, 키는 중복을 허용하지
않고, 값은 중복을 허용한다.
구현클래스 - HashMap, TreeMap, HashTable, Properties
+++ 남궁성저 Java의 정석 참고 +++
5. 접근제어자의 종류와 특성에 대하여 설명하라.
private - 같은 클래스 내에서만 접근이 가능하다.
default - 같은 패키지 내에서만 접근이 가능하다.
protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
public - 접근 제한이 전혀없다.
접근 허용 범위는 아래와 같다
public > protected > default > private
6. 객체의 직렬화란 무엇인가?
객체를 데이터 스트림으로 만드는 것을 뜻한다.
객체에 저장된 데이터를 스트림에 쓰기위해 연속(serial)적인 데이터로 변환하는 것을 말한다.
반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화라고 한다.
직렬화가 가능하게 하기위해서는 java.io.Serializable인터페이스를 구현하면 된다.
직렬화하고자 하는 객체의 클래스에 직렬화가 안 되는 객체에 대한 참조를 포함하고 있다면,
제어자 transient를 붙여서 직렬화 대상에서 제외하도록 할 수 있다.
+++ 남궁성저 Java의 정석 참고 +++
7. Wrapper 클래스란 무엇인가?
primitive 타입으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우가 있는데 그러한
기능을 지원하는 클래스를 뜻하며 각 primitive 타입에 대응하는 Wrapper 클래스는 아래와
같다.
byte => Byte
short => Short
int => Integer
long => Long
char => Character
float => Float
double => Double
boolean => Boolean
+++ 김윤명저 뇌를 자극하는 Java 프로그래밍 참고 +++
8. 객체지향 언어(Object Oriented Language)의 장점은 무엇인가?
- 코드의 재사용성이 높아 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
- 코드의 관리가 용이하여 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
- 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을
제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.
+++ 남궁성저 Java의 정석 참고 +++
9. Thread를 구현하기 위한 두 가지 방법은 무엇인가?
java.lang.Thread 클래스를 상속받거나 java.lang.Runnable 인터페이스를 구현한다.
10. 추상클래스란 무엇인가?
클래스를 설계도에 비유한다면 추상클래스는 미완성 설계도에 비유할 수 있다. 미완성 설계도란, 단어
의 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말한다. 클래스가 미완성이라는 것은 멤버의 개수에
관계된 것이 아니라, 단지 미완성 메서드(추상메서드)들 포함하고 있다는 의미이다. 미완성 설계도로
완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성활 수 없다. 추상클래스는 상속을 통해서
자손클래스에 의해서만 완성될 수 있다.
+++ 남궁성저 Java의 정석 참고 +++
11. 인터페이스란 무엇인가?
인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스
보다 추상화 정도가 높아서 추상클래스와는 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으
로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 어떠한 요소도 허용하지
않는다. 추상클래스를 부분적으로만 완성된 '미완성 설계도'라고 한다면, 인터페이스는 구현된 것은 아
무것도 없고 밑그림만 그려져 있는 '기본 설계도'라고 할 수 있다. 인터페이스는 인터페이스로부터만
상속받을 수 있으며, 클래스와는 달리 다중상속, 즉 여러개의 인터페이스로부터 상속을 받는 것이 가능
하다.
+++ 남궁성저 Java의 정석 참고 +++
12. NIO란 무엇인가?
기존 자바IO의 단점을 보완한 New IO(NIO) 패키지로써 nonblocking IO를 지원한다.
Buffer클래스를 도입하여 기존에 단순배열로만 처리해야 했던 많은 부분들을 좀 더
효율적이고 편리하게 다룰 수 있도록 지원한다.
기존의 스트림은 단방향이었으나 Channel을 도입하여 읽기, 쓰기, 읽고쓰기 등의 세가지
형태의 작업방식을 지원하며, 운영체제에서 제공하는 다양한 네이티브 IO서비스를 이용
가능하게 지원한다.
버퍼, 채널과 함께 셀렉터를 이용하게 함으로써 단 한개의 쓰레드만으로 수천에서 수만명의
동시 사용자를 처리 할 수 있는 서버를 만들 수 있게 지원한다.
+++ 김성박,송지훈저 자바I/O & NIO 프로그래밍 참고 +++
## Web개발 관련 질문 ##
1. REST 서비스란 무엇인가?
확장성 생성 언어(XML) 파일로 된 웹 페이지를 읽어 원하는 정보를 수집하는 기능. 웹 페이지를 만드는 사람은 주기적으로 내용을 개정하고 사용자는 그 페이지의 URL만 알면 웹 브라우저로 읽어 정보를 얻을 수 있다. 하이퍼텍스트 전송 규약(HTTP)과 XML을 포함한 웹 기술 및 프로토콜을 사용하는 구조적 형태로서 단순 객체 접근 프로토콜(SOAP)보다 사용이 간편하고, 사이트 내용을 기술하는 RSS(RDF Site Summary)의 정보 편집 기능과 유사하다. RSS는 자원 기술 개념(RDF)을 사용한다.
+++ 네이버 지식백과 +++
http://terms.naver.com/entry.nhn?docId=831094&mobile&categoryId=2959
2. CI란 무엇인가?
continuous integration의 약자로 말 그대로 지속적인 통합을 말한다.
개발이 완료되는 시점에 단위기능들을 통합하는것이 아닌 개발과 동시에 통합을 진행함으로써
소프트웨어의 품질을 향상시키는것을 목표로 한다.
3. DI란 무엇인가?
Dependency Injection의 약자로 의존성을 주입하는 것을 뜻한다.
설정 파일을 통해 객체간의 의존관계를 설정함으로써 외부 Assembler가 객체간의 의존 관계를 정의하게 되며, 객체는 직접 의존하고 있는 객체를 생성하거나 검색할 필요가 없어지므로 코드의 관리가 쉬워진다.
4. AOP란 무엇인가?
Aspect Oriented Programming을 뜻하며 다양한 곳에서 자주 사용되는 공통 관심요소를 단일 기능으로 뽑아내어 코드의 중복을 줄이고 관리의 효율성을 높이는 것을 목적으로 한다.
로깅이나 로그인등의 기능을 예로 들 수 있다.
5. HTML5의 주요 기능은 무엇인가?
Canvas 지원
SVG 지원
Geolocation 지원
Application Cache 지원
WebStorage 지원
6. CSS Position 속성에 대해 설명하세요
- static
position속성의 기본값으로 문서의 기본 flow에 위치하며 top, left, bottom, right 값을 부여할 수 없다
- absolute
문서의 기본 flow를 벗어나서 상대 위치로 지정된 부모요소를 기준으로 위치하게 된다.
- relative
문서의 기본 flow를 기준으로 상대적인 위치를 갖는다.
- fixed
브라우저를 기준으로 위치가 고정된다.
- inherit
부모 요소의 position값을 상속받는다.