햄찌개

웹개발자 면접 꿀팁 본문

꿀팁

웹개발자 면접 꿀팁

햄찌개 2020. 9. 17. 09:38

 자바 웹 개발자로 취업을 준비하시는 분들을 위해서 기본적인 이론 내용을 정리했습니다. 신입분들에게 난이도가 높은 기술적인 내용은 대부분 물어보지 않기 때문에 기본적인 이론 내용과 진행한 프로젝트에 기술적인 설명을 정리한 후 면접에 임하시면 좋은 결과가 있을 것라고 생각합니다. 모두들 좋은 결과가 있으시면 좋겠습니다:)

 

1. JAVA

JAVA는 썬 마이크로시스템즈(Sun Microsystems)에서 개발하여 1996 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다.

 

1) 운영체제에 독립적이다.

일종의 에뮬레이터인 자바가상머신(JVM)을 통해서 가능한 것인데자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다자바로 작성된 프로그램은 운영체제에 독립적이지만 JVM은 운영체제에 종속적이어서 썬에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공하고 있다.

자바가상머신(JVM) : 자바를 실행하기 위한 가상 컴퓨터 

 

2) 객체지향언어이다.

 객체지향개념의 특징인 상속캡슐화다형성이 잘 적용된 순수한 객체지향언어라는 평가를 받고 있다.

 

3) 배우기 쉽다.

 자바의 연산자와 기본구문은 C++에서객체지향관련 구문은 스몰톡(small talk)이라는 객체지향언어에서 가져왔다이 들 언어의 장점은 취하면서 복잡하고 불필요한 부분은 과감히 제거하여 단순화함으로서 쉽게 배울 수 있으며간결하고 이해하기 쉬운 코드를 작성할 수 있도록 하였다.

 

4) 자동 메모리 관리(Garbage Collection)

 자바로 작성된 프로그램이 실행되면가비지컬렉터(garbage collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리 하지 않아도 된다가비지컬렉터가 없다면 프로그래머가 사용하지 않는 메모리를 체크하고 반환하는 일을 수동적으로 처리해야할 것이다.

 

5) 네트워크와 분산처리를 지원한다.

 인터넷과 대규모 분산환경을 염두에 둔 까닭인지 풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.

 

6) 멀티쓰레드를 지원한다.

 일반적으로 멀티쓰레드(multi-thread)의 지원은 사용되는 운영체제에 따라 구현방법도 상이하면처리 방식도 다르다그러나 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과는 관계없이 구현가능하며관련되 라이브러리(Java API)가 제공되므로 구현이 쉽다.

 

7) 동적 로딩(Dynamic Loading)을 지원한다.

보통 자바로 작성된 어플리케이션은 여러 개의 클래스로 구성되어 있다자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다그 외에도 일부 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일하지 않아도 되며어플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 어플리케이션을 작성할 수 있다.

 

2. 객체지향 프로그래밍(Object-Oriented Programming, OOP)

 객체지향이론의 기본 개념은 ‘실제 세계는 사물(객체)로 이루어져 있으며발생하는 모든 사건들은 사물간의 상호작용이다.’ 라는 것이다.

 

 주요특징

1) 코드의 재사용성이 높다.

 - 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

2) 코드의 관리가 용이하다.

 - 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

3) 신뢰성이 높은 프로그래밍을 가능하게 한다.

 - 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.

비밀번호와 같이 중요한 데이터를 외부에서 접근하지 못하게 하거나 날짜와 월 데이터가 13월이 되는 것을 막을 수 있다.

 

3. 클래스와 객체

클래스의 정의 – 클래스란 객체를 정의해 놓은 것이다.

클래스의 용도 – 클래스는 객체를 생성하는데 사용된다.

객체의 정의 – 실제로 존재하는 것사물 또는 개념 (클래스에 정의된 내용대로 메모리에 생성된 것)

객체의 용도 – 객체의 속성과 기능에 따라 다름.

클래스

객체

제품 설계도

제품

TV 설계도

TV

잉어빵 기계

잉어빵

 

4. Overloading(오버로딩) Overriding(오버라이딩)

4_1) Overloading(오버로딩)

하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것 (기존의 없는 새로운 메서드를 정의하는 것 )

 

조건

1) 메서드의 이름이 같아야 한다.

2) 매개변수의 개수 또는 타입이 달라야 한다.

3) 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.

 

4_2) Overriding(오버라이딩)

조상클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것 상속받은 메서드의 내용을 변경하는 것(change, modify) )

 

조건

1) 선언부가 같아야 한다. (이름매개변수리턴타입)

2) 접근제어자를 좁은 범위로 변경할 수 없다

 - 조상의 메서드가 protected라면범위가 같거나 넓은 protected public으로만 변경할 수 있다.

3) 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

 

5. 제어자

 제어자(modifier)는 클래스변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다클래스나 멤버변수와 메서드에 주로 사용되며 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능하다, 접근 제어자는 한 번에 네 가지 중 하나만 선택해서 사용할 수 있다.

 접근 제어자 – public, protected, default, private

 그 외의 제어자 – static, final, abstract, native, transient, synchronized, volatile, strictfp

 

5_1) static – 클래스의공통적인

 static이 사용될 수 있는 곳 – 멤버변수메서드초기화 블록

 

제어자

대상

의미

static

멤버변수

모든 인스턴스에 공통적으로 상용되는 클래스변수가 된다.

클래스변수는 인스턴스를 생성하지 않고도 사용가능하다.

클래스가 메모리에 로드될 때 생성된다.

메서드

인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.

- static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.

 

5_2) final – 마지막의변경될 수 없는

 

제어자

대상

의미

final

클래스

변경될 수 없는 클래스확장될 수 없는 클래스가 된다.

- final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.

메서드

변경될 수 없는 메소드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다.

멤버변수

변수 앞에 final이 붙으면값을 변경할 수 없는 상수가 된다.

지역변수

 

5_3) abstract – 추상의미완성의

 

제어자

대상

의미

abstract

멤버변수

클래스 내에 추상메서드가 선언되어 있음을 의미한다

메서드

선언부만 작성하고 구현부는 작성하지 않은 추상메서드임을 알린다.

 

클래스 영역에 선언된 변수를 멤버변수라 한다멤버변수 중에 static이 붙은 것은 클래스변수(static변수), static이 붙지 않은 것은 인스턴스변수라 한다멤버변수는 인스턴스변수와 static변수를 모두 통칭하는 말이다.

 

5_4) 접근 제어자(access modifier)

 접근 제어자는 멤버 또는 클래스에 사용되어해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다

 접근 제어자가 default임을 알리기 위해 실제로 default를 붙이지 않는다클래스나 멤버변수메서드생성자에 접근 제어자가 지정되어 있지 않다며접근 제어자가 default임을 뜻한다.  

 

제어자

의미

private

같은 클래스 내에서만 접근이 가능하다.

default

같은 패키지 내에서만 접근이 가능하다.

protected

같은 패키지 내에서그리고 다른 패키지의 자손 클래스에서 접근이 가능하다.

public

접근 제한이 전혀 없다.

 

6.추상클래스(abstract class)와 추상메서드(abstract mothod)

6_1) 추상클래스(abstract class)?

클래스가 설계도라면 추상클래스는 ‘미완성 설계도

추상메서드(미완성 메서드)를 포함하고 있는 클래스

일반메서드가 추상메서드를 호출 할 수 없다

완성된 설계도가 아니므로 인스턴스를 생성할 수 없다.

다른 클래스를 작성하는데 도움을 줄 목적으로 작성된다.

 

6_2) 추상메서드(abstract mothod)?

선언부만 있고 구현부(몸통, body)가 없는 메서드

꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 사용된다.

추상클래스를 상속받는 자손클래스에서 추상메서드의 구현부를 완성해야한다.

 

7. 인터페이스(interface)?

일종의 추상클래스추상클래스(미완성 설계도)보다 추상화 정도가 높다

실제 구현된 것이 전혀 없는 기본 설계도.

추상메서드와 상수만을 멤버로 가질 수 있다.

인스턴스를 생성할 수 없고클래스 작성에 도움을 줄 목적으로 사용된다.

미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는데 사용된다.

 

8. 컬렉션 프레임웍(Collection Framework)

8_1) 컬렉션 프레임웍(Collection Framework)?

 다수의 데이터를 쉽게 처리할 수 있는 표준화된 방법을 제공하는 클래스들

 

8_2) 컬렉션 프레임웍의 핵심 인터페이스

 

인터페이스

특징

List

순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.

) 대기자 명단

구현클래스 : ArrayList, LinkedList, Stack, Vector 

Set

순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.

) 양의 정수집합, 소수의 집합

구현클래스 : HashSet, TreeSet 

Map

(Key)와 값(Value)의 쌍(pair)으로 이루어진 데이터의 집합

순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.

) 우편번호, 지역번호(전화번호)

구현클래스 : HashMap, TreeMap, Properties 

 

9. 동기화(Synchronization)

 멀티쓰레드(multi-thread) 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있기 때문에 데이터의 일관성(consistency)을 유지하기 위해서는 동기화(synchronization)가 필요하다.

 Vector Hashtable과 같은 구버전(JDK1.2 이전)의 클래스들은 자체적으로 동기화 처리가 되어 있는데, 멀티쓰레드 프로그래밍이 아닌 경우에는 불필요한 기능이 되어 성능을 떨어뜨리는 요인이 된다. 그래서 새로 추가된 ArrayList HashMap과 같은 컬렉션은 동기화를 자체적으로 처리하지 않고 필요한 경우에만 java.util.Collections 클래스의 동기화 메서드를 이용해서 동기화 처리가 가능하도록 변경하였다.

 

10. ArrayList LinkedList

1) 순차적으로 추가/삭제하는 경우에는 ArrayList LinkedList보다 빠르다

2) 중간 데이터를 추가/삭제하는 경우에는 LinkedList ArrayList보다 빠르다.

 

11. Iterator

 컬렉션 클래스에 저장된 요소들을 나열하는 방법을 제공한다. 컬렉션 클래스의 iterator()를 호출해서 Iterator를 구현한 객체를 얻는다.

 

메서드

설명

Boolean hasNext()

읽어 올 요소가 남아있는지 확인하다. 있으면 ture, 없으면 false를 반환한다.

Object next()

다음 요소를 읽어 온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다.

void remove()

next()로 읽어 온 요소를 삭제한다.

next()를 호출한 다음에 remove()를 호출해야한다.(선택적인 기능)

 

12. Stack Queue

 스택(Stack)은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO(Last In First Out)구조로 되어 있고, (Queue)는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out)구조로 되어 있다.

 순차적으로 데이터를 추가하고 삭제하는 스택(Stack)에는 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합하지만, 큐는 데이터를 꺼낼 때 항상 첫 번째 저장된 데이터를 삭제하므로, ArrayList와 같은 배열기반의 컬렉션 클래스를 사용한다면 데이터를 꺼낼 때마다 빈 공간을 채우기 위해 데이터의 복사가 발생하므로 비효율적이다. 그래서 (Queue) ArrayList보다 데이터의 추가/삭제가 쉬운 LinkedList로 구현하는 것이 더 적합하다.

 

13. 프로세스(process)와 쓰레드(thread)

 프로세스(process)란 간단히 말해서 실행 중인 프로그램(program)이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다.

 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으면 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다. 그래서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스(multi-threaded process)라고 한다.

* 프로그램 : 컴퓨터를 실행시키기 위해 차례대로 작성된 명령어 모음.

 

14. 스트림(stream)

 자바에서 입출력을 수행하려면,  어느 한쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무엇가가 필요한데 이것을 스트림(stream)이라고 정의했다.

 스트림은 연속적인 데이터의 흐름을 물에 비유해서 붙여진 이름인데 여러 가지로 유사한 점이 많다. 물이 한쪽 방향으로만 흐르는 것과 같이 스트림은 단방향통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다. 그래서 입력과 출력을 동시에 수행하려면 입력을 위한 입력스트림(input stream)과 출력을 위한 출력스트림(output stream), 모두 2개의 스트림이 필요하다.

 

15. 직렬화(serialization)

 직렬화(serialization) 객체를 데이터 스트림으로 만드는 것을 뜻한다. 다시 얘기하면 객체에 저장된 데이터를 스트림에 쓰기(write)위해 연속적인(serial) 데이터로 변환하는 것을 말한다. 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(deserialization)라고 한다. ( 객체의 인스턴스 변수들의 값을 일렬로 나열하는 것 )

 * 객체는 클래스에 정의된 인스터스 변수의 집합이다. 객체에는 클래스변수나 메서드가 포함되지 않는다. 객체는 오직 인스턴스 변수들로만 구성되어 있다.

 

 참고 : Java의 정석 

 

16. Servlet

16_1) Servlet이란?

 - Servlet은 웹에서 Java 프로그래밍을 구현하기 위해서 탄생했다. (웹 개발을 위해 만든 표준)

 - Java로 구현된 (CGI – Common Gatway Interface) 라고 말한다.