Knowledge

[Knowledge] 기본 면접 질문사항들

Jeong Jeon
반응형

OOP란?

객체 지향 프로그래밍이란 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말합니다

현실세계의 사물들을 객체라고 말하고, 그 객체로부터 개발하고자 하는 APP에 필요한 특징들을 가져와 프로그래밍 하는 것입니다.

대표적으로 캡슐화, 추상화, 상속, 다형성이 있습니다.

  • 캡슐화
    • 하나의 객체에 대해 그객체가 특정한 목적을 위해 필요한 변수 및 메소드로 묶는것을 의미합니다. 이때 실제구현 한 내용 일부를 외부에 감추어 은닉화 합니다.
  • 추상화
    • 구체적인 내용은 감추고, 보여주고 싶어하는 특성은 드러내는것을 말합니다. 예를 들어 인터페이스로 보여주고 싶은것들을 표현하고, 해당 인터페이스를 구체적으로 구현하는 것은 숨겨놓는 방식입니다.
  • 상속
    • 부모클래스가 가지고 있는 것들을 자식클래스가 물려받아 같이 공유하여 확장하는 개념입니다.
  • 다형성
    • 하나의 객체를 여러 개의 타입으로, 하나의 타입으로 여러 종류의 객체를 여러 가지 모습으로 해석 할 수 있는 개념입니다.

직렬화란?

자바에서 입출력 할 때는 <스트림>이라는 통로를 통해 데이터가 이동합니다. 하지만 객체는 바이트형이 아니기때문에 스트림을 통해 파일에 저장 또는 전송할 수 없습니다.

그렇기 때문에 이 객체를 스트림을 통해 입출력 할 수 있게 바이트 배열로 변환하는 것이 필요한데, 이것을 직렬화라고 합니다.

 


Interface 와 Abstract란?

  • Interface
    • 다중 상속 가능
    • 추상메서드, 상수만 선언가능
    • 생성자와 일반 변수를 가질수 없다.
  • Abstract <추상클래스>
    • 다중 상속 불가
    • 추상메서드 1개이상 존재해야하며, 일반변수 및 메서드 선언 가능
    • 생성자와 일반 변수를 가질 수 있다.
    • 부분 구현된 메서드를 상속받아 확장 시키기 위해 부분 구현이 가능하다.

String vs StringBuffer vs StringBuilder

  • String
    • immutable
    • 객체를 한번 할당시 메모리공간에 변동이 없습니다. String객체는 Heap의 StringPool영역에 생성되어 그값을 사용하기 때문입니다.
    • 동기화를 신경쓰지 않아도됩니다. (Thread-safe)
  • StringBuffer
    • mutable
    • Syncronized Keyword가 존재합니다.
    • 멀티스레드 환경에서도 동기화를 지원합니다. (Thread-safe)
  • StringBuilder
    • mutable
    • 동기화를 지원하지 않는다.

동기화란?

여러개의 쓰레드가 하나의 자원에 접근할때 한순간에는 하나의 쓰레드만 접근할 수 있도록 하는 것입니다.


자바 메모리 영역

  • 메서드 영역
    • static 변수, 전역 변수, 코드에서 사용되는 Class 정보 등이 할당됩니다.
  • 스택(Stack)
    • 지역 변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리입니다.
  • 힙(Heap)
    • new 연산자를 통한 동작할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리됩니다.

제네릭이란?

객체의 타입을 지정하는 방법인데, 객체의 타입을 컴파일시에 체크하기 때문에, 제네릭을 통해 객체타입 안정성을 높여 줍니다.


DCL, DDL, DML 이란?

  • DCL(Data Control Language) 데이터 제어어
    데이터베이스에 접근하거나 객체에 권한을 주는등의 역할을 하는 언어를 말합니다.(GRANT, REVOKE, COMMIT, ROLLBACK)
  • DDL(Data Definition Language) 데이터 정의어
    데이터베이스를 정의하는 언어이며 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어 입니다.(CREATE, ALTER, DROP, TRUNCATE)
  • DML(Data Manipulation Language) 데이터 조작어
    정의된 데이터베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할을 하는 언어를 말합니다.(SELECT, INSERT, UPDATE, DELETE)

- 2020.02.05 추가

Transaction이란?

 

1). 정의: 데이터베이스의 상태를 변환 시키는 하나의 논리적인 기능의 작업 단위이다. 데이터 베이스 관리 시스템이나 비슷한 시스템과 상호 작용하는 작업 단위.

 

2).트랜잭션의 성질

1. 일관성(Consistency) - 트랜잭션은 언제나 일관성 있는 데이터 베이스 상태를 유지하는 것을 의미.

2. 원자성(Atomicity) - 하나의 트랜잭션의 속한 작업들이 모두 실패인지 성공인지 보장을 의미 즉 하나로 간주

3. 고립성(lsolation) - 트랜잭션을 수행 시 다른 트랜잭션의 작업이 끼어들어들지 못하게 보장하는 것을 의미

4. 지속성(Durability) - 트랜잭션을 성공적으로 마치면 결과가 영원히 반영 되어야 하는걸 의미

 


SpringFramework 기본 정리

 

DI(Dependency Injection)이란?

  • 의존적인 객체를 직접 생성하거나제어하는 것이 아니라제어의 역행으로 특정 객체에 필요한 객체를 외부에서 결정해서 연결 시키는 것을 의미합니다.
  • 생성자주입과 메서드 주입이 있습니다.
  • 클래스간의 결합도를 낮춰줍니다.

 

AOP(Aspect Orientated Programming)이란?

  • 개발자에게 주관심(CC)와 관심없는 부분(CCC)을 구분지어 공통으로 사용되는 부분은 따로 빼 필수적인 부분만 개발하는데 집중할 수 있도록 합니다.
  • 코드의 중복을 해결해줍니다.

 

IOC (Inversion Of Controller)란?

  • 제어권이 서블릿과 EJB를 관리하는 외부의 컨테이너로 넘어갔고 객체의 생성부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐 것을 IoC, 제어의 역전이라 합니다.
  1. Bean Factory
    • IoC컨테이너 기능을 정의하는 인터페이스
    • Bean의 생성 및 의존성 주입, 생명주기 등 관리기능 제공합니다.
  2. Application Context
    • BeanFactory가 제공하는 기능 외에 AOP, 메세지처리, 이벤트 처리 등의 기능을 제공합니다.

 

Spring Container의 생명주기

스프링 컨테이너는 초기화~ 종료까지의 생명주기를 가지고 있습니다.

 

1. ApplicationContext를 이용해서 객체를 생성하고 스프링 컨테이너를 초기화 합니다. => Bean객체 생성 및 의존객체 주입

2. getBean()과 같은 메서드를 이용해서 컨테이너에 있는 빈 객체를 사용합니다.

3. close() 메서드를 이용해서 컨테이너를 종료합니다 => Bean객체 소멸

 

 

Bean객체의 생명주기

스프링 컨테이너의 생명주기에 따라 Bean의 생명주기가 결정되는것을 알수 있습니다.

 

  1. 객체생성 : 스프링 컨테이너를 초기화 할 때, 가장 먼저 빈 객체를 생성합니다.
  2. 의존 설정 : 빈 객체 생성 후, <property> 태그로 지정한 의존을 설정합니다. (의존 주입도 이 단계에서 수행됩니다!)
  3. 초기화 : 모든 의존 설정이 완료되면, 빈 객체 초기화를 합니다. (빈 객체를 초기화하기 위해 빈 객체의 지정한 메서드를 호출)
  4. 소멸 : 스프링 컨테이너를 종료하면, 스프링 컨테이너는 빈 객체를 소멸 시킵니다. (빈 객체의 소멸을 처리하기 위해 빈 객체의 지정한 메서드를 호출)

계속 추가해야지이

반응형