💡 객체 지향 프로그래밍이란 무엇인가?
절차지향 프로그래밍은 오로지 컴퓨터 관점에서의 프로그래밍 패러다임이라면 객체지향은 인간이 구분할 수 있는 요소를 객체로 표현한 인간 중심적 프로그래밍 패러다임이다. 객체는 기억장소와 이 기억장소의 값을 변경할 수 있는 연산의 집합이 정의되면 객체를 선언할 수 있다. 많은 객체 지향 언어에서 객체는 클래스로 그룹화 된다. 생성된 클래스로 객체의 특정 예를 생성하는데 이를 인스턴스라고 부른다. 객체 간의 정보 교환이 모두 메시지 교환을 통해 일어난다. 객체 지향 프로그래밍은 4가지 특징을 가진다.
- 추상화 : 클래스를 구현함에 있어 필요한 부분만 구현할 수 있다.
- 캡슐화 : 어떤 클래스를 이용함에 있어 내용(내부적인 데이터 흐름)은 알 필요 없이 사용해도 된다.
- 은닉화 : 클래스의 내용을 함부로 고치지 못하도록 하여 무결성을 보장한다.
- 상속 : 어떤 클래스(부모 클래스)의 속성과 메소드를 다른 클래스(자식 클래스)가 이어 받아 사용할 수 있다.
- 다형성 : 동일한 요청에 다른 방식으로 처리할 수 있도록 한다.
💡OOP란?
OOP란 Object(객체) Oriented(지향) Programming(프로그래밍)의 약어로 객체지향형 프로그래밍을 의미한다.
모든 데이터를 객체로 취급하여 프로그램에 반영한 것이며 순차적으로 프로그램이 동작하는 기존의 것들과는 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다.
- 코드의 재사용이 가능한 장점
- 오류 발생 가능성이 적고 안정성이 높음
- 변경용이
- 직관적인 코드분석
- 개발속도향상
- 상속을 통한 장점 극대화
💡자바의 특징은?
자바는 네트워크상에서 쓸 수 있도록 미국의 선 마이크로 시스템즈가 개발한 객체 지향 프로그래밍언어이다.
[장점]
- [이식성이 좋다] : 자바 가상 머신(JVM)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다. 즉, 운영체계에 독립적이라는 것이다. 구조 중립적이라고도 표현하며, 구조 중립적인 자바는 높은 이식성을 제공한다.
- [객체 지향 언어] : 기본 자료형을 제외하고는 모든 요소들이 객체로 표현되면 객체 지향 개념의 특징인 캡슐화, 상속, 다형성 등이 잘 적용된 객체지향언어이다.
- 보안성이 뛰어나다.
- [메모리를 스스로 관리] : 가비지 컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해준다.
- 멀티 쓰레드(Muti-Thread)를 지원한다.
- 미리 설치되지 않은 프로그램이 서버로부터 동적으로 다운로드되어 웹 브라우저에서 실행할 수 있도록 동적인 성능 확장을 제공한다.
- 분산 환경에 적합하여 네트워크 수행 능력이 뛰어나다.
[단점]
- 자바는 실행을 위해 자바 가상 머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느림
- 바이트 코드를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 Hotspot과 같은 신기술 도입으로 JVM의 기능이 향상됨으로써 속도문제가 상당히 개선되었다.
- 자바는 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해 줘야 한다는 불편함
- 자바는 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편
💡UML이란?
UML은 Unified Modeling Language의 약어로 ‘객체모델링 언어’ 또는 ‘통합모델링 언어’를 뜻한다.
시스템 설계, 요구분석, 시스템 구현등의 과정에서 사용되는 모델링 언어로 표기법의 표준화를 목적으로 한 것이다.
[주요 다이어그램]
- 클래스 다이어그램 : 가장 많이 이용되는 다이어그램. 클래스의 내부구조와 클래스 사이의 관계를 모델링 할 때 사용.
- 객체 다이어그램 : 클래스 다이어그램을 보충하기 위하여 사용.
- 컴포넌트 다이어그램 : 소프트웨어 컴포넌트 사이의 정렬과 의존을 나타냄.
💡스레드(Thread) 정의
프로세스내에서 동시에 실행되는 독립적인 실행 단위를 말함.
장점으로는 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높다.
💡스레드(Thread) 특징
- 어플리케이션의 성능을 향상시킬수 있고, 구현이 쉽다. 즉 작은 투자로 큰 효과를 기대.
- 스레드를 활용한 대표적인 예) 웹 브라우저
- 스레드를 쓰지 않고 프로세스나 다른 방법을 통하여 비슷하게 구현 할 수 있다.
반면 대부분의 자원을 많이 소모하여 구현이 복잡해지고 범용성이 떨어지는 등의 문제점이 있다.
스레드를 사용함으로써 이 문제들을 해결할 수 있다.
스레드는 각자의 스택 메모리영역을 가지고 있다. 프로세스와 달리 스레드는 동일한 프로세스내의 다른 스레드들과 전역메모리를 공유한다.
이에 반해 프로세스는 자기 자신의 메모리영역을 가진다.
💡스레드(Thread) 장단점
[장점]
- 빠른 프로세스 생성
- 적은 메모리 사용
- 쉬운 정보 공유
[단점]
- 교착상태에 빠질 수 있다.
스레드는 작업 디렉토리, 파일 지시자들, 대부분의 전역변수와 데이터, UID와 GID 같은 자원들을 서로간에 공유하고 있기 때문에 자원을 프로세스 복사(copy-on-write)방식으로 자식 프로세스에게 복사하여 사용하는 프로세스(fork) 방식에 비해 더 빠른 수행능력을 보여주고 있다.
하지만 다중스레드 방식의 프로그래밍에서는 매우 정교한 실패나 의도하지 않은 변수의 공유로 인해 야기되는 실패가 발생할 가능성이 매우 높다. 그 대표적인 예)교착상태
교착상태 : 다중프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행 할 수 없는 어떤 특정시간을 기다리고 있는 상태.
망에서는 사용 가능한 버퍼가 없어 일단의 노드들이 패킷을 전송할 수 없는 상태이다. 데이터 통신망에서 송신기 및 수신기간에 전송할 정보는 있지만 송수신에 필요한 자원이 서러 맞물려 있어 송수신이 이루어질수 없는 현상. 교착상태에는 직접, 간접 및 재조립 교착상태가 있다.
💡스레드와 프로세스의 차이점은?
운영체제에서 실행중인 하나의 프로그램을 프로세스(Process)라고 한다. 여러 분야에서 ‘과정’ 또는 ‘처리’라는 뜻으로 사용되는 용어로 컴퓨터 분야에서는 ‘실행중인 프로그램’이라는 뜻으로 쓰인다. 이 프로세스 내에서 실행되는 각각의 일을 스레드라고 한다. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다.
💡 REST API란 무엇인가?
REST는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성된 API 아키택쳐이다. 웹의 장점과 HTTP의 우수성을 적극 활용할 수 있는 아키텍처로 URI를 통해서 자원을 명시하고 POST, GET, PUT, PATCH, DELETE등의 Method를 통해서 해당 자원의 행위를 지정한다. 코드의 재사용성을 높일 수 있으며 프론트엔드와 백엔드의 완전한 분업이 가능해지는 등 장점을 가진다.
💡TDD란 무엇이며 어떠한 장점이 있는가?
테스트 주도 개발(Test Driven Development), 테스트를 먼저 만들고 테스트를 통과하기 위한 코드를 작성하는 것을 의미하며 모듈화가 자연스럽게 잘 이루어지면서 개발이 진행된다. 테스트 커버리지가 높아져 리팩토링과 유지보수가 쉬워진다.
💡MVC 패턴이란 무엇인가?
모델(Model), 뷰(View), 컨트롤러(Controller)가 분리된 형태의 아키텍처이다. 세가지가 결합된 형태에서는 어플리케이션의 확장이 어렵다. 모델은 데이터 처리, 뷰는 사용자 인터페이스 처리, 컨트롤러는 비즈니스 로직을 처리하는 등 각각의 요소가 하나의 역할만 담당한다.
💡 MVC1과 MVC2의 차이점
MVC1
MVC2
MVC2는 요청의 결과를 보여주는 뷰만 JSP가 담당하고, 컨트롤러의 역할은 서블릿이 담당한다.
💡 Spring MVC란?
- MVC는 Model, View, Controller의 약자이며, 각 레이어간 기능을 구분하는데 중점을 둔 디자인 패턴입니다.
- Model은 데이터 관리 및 비즈니스 로직을 처리하는 부분 (DAO, DTO, Service 등)
- View는 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간 (html, jsp, tymeleaf, mustache 등 화면을 구성하기도 하고, Rest API로 서버가 구현된다면 json 응답으로 구성되기도 한다.)
- Controller는 사용자의 요청을 처리하고 Model과 View를 중개하는 역할
Model과 View는 서로 연결되어 있지 않기 때문에 Controller가 사이에서 통신 매체가 되어줍니다.
'📌ETC > Tech Interview' 카테고리의 다른 글
신입 개발자 기술면접 질문 정리 #6 (0) | 2022.09.20 |
---|---|
신입 개발자 기술면접 질문 정리 #5 (1) | 2022.09.16 |
신입 개발자 기술면접 질문 정리 #4 (0) | 2022.09.16 |
신입 개발자 기술면접 질문 정리 #3 (2) | 2022.09.16 |
신입 개발자 기술면접 질문 정리 #2 (0) | 2022.09.16 |