* 다형성이란 무엇인가?
여러가지 데이터를 다룰 수 있는 특성
부모클래스의 인스턴스를 이용하여 자식 타입의 클래스를 다룬다거나, 오버라이딩을 통하여 동일 이름의 method를 이용하여 다양한 자식 클래스의 method를 호출하는 것
* 멀티 쓰레드의 장단점은 무엇인가?
두 가지 이상의 작업을 동시에 실행할 수 있어 자원을 효율적으로 이용할 수 있으나 dead lock 및 동기화에 대한 철저한 검증이 필요하다.
* Java collections의 대표 인터페이스는 무엇인가?
List - 순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다. 인덱스로 조회
구현클래스 - ArrayList, LinkedList, Stack, Vector
Set - 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.
구현클래스 - HashSet, TreeSet
Map - 키와 값의 쌍으로 이루어진 데이터의 집합으로 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.
구현클래스 - HashMap, TreeMap, HashTable, Properties
* 접근제어자의 종류와 특성에 대하여 설명하시오.
private - 같은 클래스 내에서만 접근이 가능
default - 같은 패키지 내에서만 접근이 가능
protected - 같은 패키지 + 자식클래스에서 접근이 가능
public - 모든 클래스에서 접근 가능
접근 허용 범위는 아래와 같다.
public > protected > default > private
* 객체의 직렬화(Serialization)란 무엇인가?
객체를 파일로 저장하거나 네트워크를 통해 전달하기 위해 데이터 스트림으로 변환하는 작업객체에 저장된 데이터를 스트림에 쓰기 위해 연속(Serial)적인 데이터로 변환하는 것을 말한다.
반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(Deserialization)라고 한다.
직렬화가 가능하게 하기 위해서는 java.io.Serializable 인터페이스를 구현하면 된다.
직렬화하고자 하는 객체의 클래스에 직렬화가 안된 객체 또는 비밀번호와 같이 숨기고 싶은 정보가 있다면 제어자 transient(일시적인, 잠깐 머무르는)를 붙여서 직렬화 대상에서 제외하도록 할 수 있다.
* 객체지향 언어(Object Oriented Language)의 장점은 무엇인가?
- 코드의 재사용성이 높아 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
- 코드의 관리가 용이하여 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
- 제어자와 method를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.
* Thread를 구현하기 위한 두 가지 방법은 무엇인가?
java.lang.Thread 클래스를 상속받거나 java.lang.Runnable 인터페이스를 구현한다.
* REST(REpresentational State Transfer) 서비스란 무엇인가?
하나의 URI가 하나의 고유한 리소스를 대표하도록 설계된 개념
http://localhost/reply/list?bno=1 → http://localhost/reply/list/1
http://localhost/reply/list?bno=7 → http://localhost/reply/list/7
* CI(Continuous Integration)란 무엇인가?
지속적인 통합
개발이 완료되는 시점에 단위 기능들을 통합하는 것이 아닌 개발과 동시에 통합을 진행함으로써 소프트웨어의 품질을 향상시키는 것을 목표로 한다.
* DI란 무엇인가?
Dependency Injection의 약자로 의존성을 주입하는 것을 뜻한다.
설정 파일 또는 @Inject 어노테이션을 통해 객체 간의 의존관계를 설정함으로써 외부 Assembler가 객체 간의 의존 관계를 정의하게 되며, 객체는 직접 의존하고 있는 객체를 생성하거나 검색할 필요가 없어지므로 코드의 관리가 쉬워진다.
* AOP란 무엇인가?
Aspect Oriented Programming을 뜻하며 다양한 곳에서 자주 사용되는 공통 관심요소를 단일 기능으로 뽑아내어 코드의 중복을 줄이고 관리의 효율성을 높이는 것을 목적으로 한다.
* IoC란 무엇인가?
Inversion of Control, 제어의 역전
프로그램의 제어 흐름 구조가 바뀌는 것
- 작업을 수행하는 쪽에서 Object를 생성하는 제어 흐름의 개념을 거꾸로 뒤집는다.
- Object가 자신이 사용할 Object를 생성하거나 선택하지 않는다.
- Object는 자신이 어떻게 생성되고 어떻게 사용되는지 알 수 없다.
- Object는 제어 권한을 위임받는 특별한 Object(외부 조립기)에 의해서 만들어지고 사용된다.
56 35 (image)
실행 시점에 외부 조립기에 의해서 클래스간의 의존관계가 형성됨
* HTML5의 주요 기능은 무엇인가?
Canvas 지원
SVG(Scalable Vector Graphics) 지원
Geolocation 지원
Application Cache 지원
Web Storage 지원
* CSS Position 속성에 대해 설명하세요.
- static
position 속성의 기본값으로 문서의 기본 flow에 위치하며 top, left, bottom, right 값을 부여할 수 없다.
- absolute
문서의 기본 flow를 벗어나서 절대좌표를 기준으로 위치하게 된다.
- relative
문서의 기본 flow를 기준으로 상대적인 위치를 갖는다.
- fixed
브라우저를 기준으로 위치가 고정된다(스크롤에 관계없이 항상 고정).
- inherit
부모 요소의 position값을 상속받는다.
* 속성변수, 지역변수, 매개변수에 대해서 설명해 보세요.
속성변수(property, member variable) : 해당 클래스 안에서만 쓰이는 변수.
지역변수(local variable) : 특정 지역(method)에서만 사용되는 변수이고, method가 끝나는 지점에서 자동적으로 소멸이 된다.
매개변수 : 클래스나 method 사이를 이동하면서 값을 넘겨주는 변수.
* 배열과 ArrayList의 차이점
배열 - 초기에 배열의 크기를 정해야 한다.
추가, 삭제가 어려움
ArrayList - 동적으로 추가적인 할당이 가능하다.
* Java라는 언어에 대해 어떻게 생각하는가? 어떻게 공부를 했는가?
java는 객체지향의 언어이기 때문에 코드의 재활용성이 좋으며 이식성이 높고 다양한 플랫폼에도 활용할 수 있는 API도 많아서 다양한 OS, 다양한 소비자를 만들 수 있기에 좋은 언어라고 생각합니다.
* Java와 PHP의 차이점은?
java는 구버전의 php에 비해서 복잡도가 높다. 그리고 java는 OOP 기반이라서 대규모 프로젝트에서 여러 사람들과 협업하기에 적절하다. 구버전의 php는 java에 비해서 배우기 쉽고 활용하기가 수월해서 비교적 소규모의 프로젝트에 적은 인원으로 작업이 가능하다. 하지만 최신 버전인 모던 php의 경우 보안성 및 속도가 많이 향상되었고 MVC 패턴 및 템플릿 등을 지원하고 있다.
* Java / JSP / jQuery의 차이점?
JSP : java 기반이기에 JVM이 설치된 어느 운영체제에서도 실행이 가능, 정적인 페이지, 쓰레드를 이용해 분산 처리가 가능, OOP의 캡슐화로 인해 중요한 정보의 은닉이 가능하고 자바빈즈와 서블릿 등이 컴파일 된 파일이므로 보안에 우수.
jQuery : 크로스브라우징의 대안, 코드가 간결하고 CSS 문법이 지원됨.