티스토리 뷰

ETC

신입 웹개발자(백엔드) 면접 질문

비용러브 2022. 2. 10. 13:44

목차

 

1. C와 JAVA의 차이점

2. 객체지향 언어의 특징

3. OOP란?

4. JAVA의 특징

5. 스레드의 정의와 특징

6. 스레드의 장/단점

7. 스레드와 프로세스의 차이

8. Session과 Cookie의 차이

9. 모델 1,2,MVC 패턴에 대한 설명

10. Servlet 라이프 사이클 설명

 


 

1. C와 JAVA의 차이점

   C언어랑, 인간의 명령어를 컴퓨터가 수용할 수 있는 기계적 언어로 변환시켜주는 역할을 한다. 시스템 간 호환 및 이식성이 좋고 고급언어와 저급 언어간의 인터페이스가 용이하다는 특징이 있다. 또한 절차지향 프로그래밍의 대표적 언어로 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하다.

   JAVA는 인터넷의 분산환경에서 사용되도록 설계된 프로그래밍 언어이며 인터넷 환경 기반의 프로그램을 만들고 수행 시킬 수 있는 응용 프로그램을 만들 수 있다. 또한 객체지향 프로그래밍의 대표적인 언어로 특징으로는 캡슐화, 상속, 다형성등의 특성이 있다.

 

2. 객체지향 언어의 특징

 

(1) 캡슐화(Encapsulation)와 데이터 은닉(hidden)

- 캡슐화는 어떤 클래스를 사용함에 있어 그 클래스가 제공하는 메소드의 기능만을 알고 그 기능만을 사용할 뿐 실제로 그 메소드가 어떻게 움직이는지 굳이 알 필요가 없다.(Loose coupling을 위하여)

- 은닉화는 이 캡슐화 때문에 나오는 것인데 클래스의 속성들을 private으로 만들어 클래스 밖에서 함부로 건드리지 못하게 하는 것을 말한다.  클래스를 사용함에 있어서 속성들에게 직접 접근하는 것은 데이터 무결성 오류 등 치명적일 수 있기 때문에 이를 접근하지 못하게 하고 대신 getter,setter 라고 부르는 메소드를 통해서 접근 가능케 하는 것을 말한다.

 

(2)상속(Inheritance)

부모클래스의 속성과 메소드를 자식클래스가 이어받는 것을 말한다.

  이를 통해서 코드의 재사용성을 증대시킬 수 있으며 좀 더 폭 넓게 사용이 가능하다.

  상속에는 extends하는 방법과 has~a 하는 방법이 있는데 extends는 모든 메소드를 오버라이드 해야 한다는 단점이 있지만 has~a를 하게 되면 필요한 메소드만 가지고 올 수 있는 장점이 있다.

 

(3) 다형성(Polymorphism)

- 하나의 클래스나 메서드가 다양한 방식으로 동작이 가능한 것을 의미한다. 이러한 다형성에는 오버로딩과 오버라이딩이 존재한다.

 

* 오버라이딩 : 상위 클래스를 상속받는 하위 클래스가 상위 클래스의 메소드를 사용하지 않고 하위 클래스에서 재정의하여 사용하는 것을 의미한다. 보통 재사용의 의미로 하위 클래스에서 상위 클래스의 내용을 사용하는 게 일반적이지만 필요에 따라서 하위 클래스에서 상위 클래스의 메서드 내용을 재정의 하여 사용하는 것을 의미.

 

* 오버로딩 : 같은 메서드 이름으로 다양한 입력에 대해서 처리할 수 있도록 한다. 같은 메서드 이름을 사용하면서 다른 인자 정보를 넘겨주면 인자 정보에 맞는 메서드가 호출된다.

 

3. OOP란?

Object-Orient Programming의 약어로써 객체지향형 프로그래밍을 의미한다. 모든 데이터를 객체로 취급하여 프로그램에 반영한 것이며 순차적으로 프로그램이 동작하는 기존의 것들과 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다. 객체 지향형 프로그래밍 기법은 코드의 재사용이 가능하고, 오류 발생 가능성이 저고, 안정성이 높은 것이 장점이다.

 

4. JAVA의 특징

JAVA는 미국의 선 마이크로 시스템즈가 개발한 객체 지향 언어이다.

자바의 특징으로는

(1) 운영체제에 독립적이다.(JVM만 설치하면)

(2) OOP의 특징인 캡슐화, 상속, 다형성이 있다

(3) 보안성이 뛰어나다.

(4) Garbage Collector가 자동적으로 메모리를 관리해준다.

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

(6) 미리 설치되지 않는 프로그램이 서버로부터 동적으로 다운로드 되어 웹 브라우저에서 실행할 수 있도록 동적인 성능 확장을 제공한다.

(7) 분산 환경에 적합하여 네트워크 수행 능력이 뛰어나다.

 

5. 스레드의 정의와 특징

스레드는 프로세스 내에서 동시에 실행되는 독립적인 실행단위를 말한다.

그 특징으로는 어플리케이션의 성능을 향상시킬 수 있다. 또한 스레드는 각자의 스택 메모리영역을 가지고 있다. 프로세스와 달리 스레드는 동일한 프로세스 내의 다른 스레드들과 전역메모리를 공유하며, 이에 반해 프로세스는 자기 자신의 메모리 영역을 가진다.

 

6. 스레드의 장/단점

장점 : 1. 빠른 프로세스 생성 2. 적은 메모리 사용 3. 쉬운 정보 공유

단점 : 교착상태에 빠질 수 있다. (다중프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행할 수 없는 어떤 특정시간을 기다리고 있는 상태이다)

 

7. 스레드와 프로세스의 차이

프로세스는 현재 실행되고 있는 프로그램을 프로세스라고 부르며, 이 프로세스 내에서 실행되고 있는 세부 작업 단위로 여러개의 스레드가 하나의 프로세스를 이루고 있다

 

8. Session과 Cookie의 차이

- Session : 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다. Cookie와 다르게 개인 아이디와 비밀번호와 같은 웹사이트의 데이터는 Server에 저장되거나 웹브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제 시 사라진다.

 

- Cookie : 사용자 정보를 유지할 수 없다는 HTTP고유의 한계를 극복할 수 있는 방법으로 인터넷 웹사이트의 방문 기록을 남겨 사용자와 웹사이트 사이를 매개해 주는 정보이다. 이러한 Cookie는 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일로써, Server가 아닌 Client에 텍스트파일로 저장되어있어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용한다

 

9. 모델 1,2,MVC 패턴에 대한 설명

- 모델1

뷰와 로직을 모두 JSP페이지 하나에서 처리하는 구조를 말한다.

구조가 단순하여 익히기 쉬우나, 코드가 복잡해져 유지보수가 어렵다.

- 모델2

모든 처리를 JSP 페이지 하나가 담당하는 것과는 달리 JSP 페이지와 서블릿, 그리고 로직을 위한 클래스가 나뉘어 브라우저 요청을 처리한다. 요청이 들어오면 요청에 대한 로직처리는 이를 처리할 Model인 서비스클래스 혹은 자바빈이 담당하고, 요청결과는 유저에게 결과를 보여줄 뷰(View)단인 JSP에 출력되며, 이를 위한 모든 흐름제어는 컨트롤러(Controller)인 서블릿에서 담당한다

-MVC 모델

Model-View-Controller 패턴을 웹 개발에 도입한 구조이며, 모델2와MVC 패턴의 형태는 완전히 같은 형태를 가진며 모델과 뷰를 구분하기 위하여 사용한다.

* Model - 소프트웨어 응용과 그와 관련된 고급 클래스 내의 논리적 데이터 기반 구조를 표현한다. 

* VIew - 사용자 인터페이스 내의 구성요소들을 표현하는 클래스의 집합.

* Controller - 모형과 뷰를 연결하고 있는 클래스들을 대표하며, 모형과 뷰 내의 클래스들 간에 통신하는데에 사용된다. 장점으로는 뷰와 로직을 구분하기 때문에 코드가 복잡하지 않으며, 유지보수가 용이하다.

 

10. Servlet 라이프 사이클 설명

(1) 사용자가 서블릿에 대한 링크(URL)을 클릭한다.

(2) 컨테이너는 요청된 Request가 서블릿이라는 것을 간파하고는 두개의 객체를 생성한다. -> Response, Request

(3) 접수한 요청의 URL을 분석하여 어떤 서블릿을 요청했는지 파악한다. 그 다음 해당 서블릿 스레드를 생성하여 Request, Response 객체 참조를 넘긴다.

(4) 컨테이너는 서블릿 service() 메소드를 호출한다. 브라우저에 지정한 방식에 따라 doGet()을 호출할 지, doPost()를 호출할지 결정한다. 클라이언트가 HTTP GET메소드를 날렸다면 service() 메소드는 서블릿의 doGet() 메소드를 호출한다. 호출할 때 Request와 Response 객체를 인자로 넘긴다.

(5) 서블릿은 클라이언트에게 응답을 작성(write)하기 위하여 Response객체를 사용한다. 이 작업을 완료하면, Response에 대한 제어는 컨테이너에게 넘어간다.

(6) Service()메소드가 끝나면, 스레드를 소멸하거나 아니면 컨테이너가 관리하는 스레드 풀로 돌려 보낸다. 그 다음 Request와 Response 객체를 가비지 컬렉션이 될 준비를 하고, 이 객체에 대한 참조는 이제 사라진다. 마지막으로 클라이언트는 서버로부터 응답을 받는다.

 

 

댓글