[기술면접]자바, 스프링

고지훈·2021년 12월 11일
0

LearningRecord

목록 보기
8/17
post-thumbnail

2. 자바, 스프링


[OOP]

  • 데이터를 객체로 취급하여 프로그램에 반영한 것으로, 객체의 상호작용을 통해 프로그램이 동작하는 것을 의미한다. 캡슐화, 다형성, 상속을 사용하여 코드의 재사용성을 증가시키고, 유지보수가 용이하다는 장점이 있다.

[자바의 메모리 영역]
1. 메서드 영역: Static변수, 전역변수, 코드에서 사용되는 Class정보 등이 올라간다. 코드에서 사용되는 클래스를 로더로 읽어 클래스별로 런타임 필드데이터, 메서드데이터등을 분류해 저장한다.
2. 스택(Stack): 지역변수, 함수등이 할당되는 LIFO방식의 메모리
3. 힙(Heap): new연산자를 사용하여 동적할당된 객체들이 저장되며 가비지 컬렉션에 의해 메모리 관리가 된다.
4. 메모리 상수풀 영역: 힙 영역에 생성되어 자바 프로세스 종료까지 계속 유지되는 메모리 영역이다. 기본적으로 JVM에서 관리하며 프로그래머가 작성한 상수에 대해 최우선적으로 찾아보고 없을 경우 상수풀에 추가한 이우 그 주소 값을 리턴한다. 그로인해 메모리 절약 효과가 있다.

[인터페이스]
인터페이스는 구현부가 없는 추상 메서드로 이루어진 클래스로, abstract키워드를 붙이지 않아도 자동으로 모든 메서드는 추상메서드로 정의가 된다. 또한 변수도 자동으로 final static키워드가 붙게 된다.

[JDBC]
자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.

[직렬화]
자바에서 입출력에 사용되는 것은 스트림이라는 데이터 통로를 통해 이동했다. 하지만, 객체는 바이트형이 아니라서 스트림을 통해 파일에 저장하거나 네트워크로 전송할 수 없다. 따라서 객체를 스트림을 통해 입출력하려면 바이트 배열로 변환하는 것이 필요한데 이를 '직렬화'라고 한다. 반대로 스트림을 통해 받은 직렬화된 객체를 원래 모양으로 만드는 과정을 역질렬화라고 한다.

[SerialVersionUID를 선언해야 하는 이유]
JVM은 직렬화와 역직렬화를 하는 시점의 클래스에 대한 버전 번호를 부여한다. 만약 그 시점에 클래스의 정의가 바껴있다면 새로운 버전 번호를 할당한다. 그래서 직렬화할 때 버전 번호와 역직렬화를 할 때의 버전 번호가 다르면 역직렬화가 불가능하게 될 수 있다. 이런 문제를 해결하기 위해 SerialVersionUID를 사용한다.

[리플렉션]
리플렉션은 컴파일러를 무시하고 런타임 상황에서 메모리에 올라간 클래스나 메서드등의 정의를 동적으로 찾아서 조작할 수 있는 일련의 행위를 말한다.

[Servlet vs JSP]

  • Servlet: 자바 언어로 웹 개발을 위해 만들어진 것으로, Container가 이해할 수 있게 구성된 순수 자바코드로만 이루어진 것
  • JSP: html기반에 Java코드를 블록화하여 삽입한 것으로 Servlet을 좀 더 쉽게 접근할 수 있도록 만들어진 것

[제네릭(Generic)]

  • 클래스를 선언할 때 타입을 결정하지 않고 객체를 생성할 때 유동적인 타입으로 재사용하기 위한 것
  • 형 변환을 할 필요가 없고, 타입 에러 발생확률이 줄어든다.

[pojo]
Pain Old Java Object의 축약어로 오래된 방식의 자바 오브젝트를 의미한다. J2EE등의 중량 프레임워크들을 사용하면서 해당 프레임워크에 종석된 무거운 객체를 만들게 된 것에 반발하여 특정 자바 모델이나 기능, 프레임워크등을 따르지 않는 자바 오브젝트를 지칭하는 말로 사용되었다.

[박싱 vs 언박싱]

  • 원시형 => Wrapper Class로 변환하는 작업(박싱)
  • Wrapper Class => 원시형로 변환하는 작업(언박싱)

[데드락]
데드락이란, 둘 이상의 쓰레드가 Lock을 획득하기 위해 기다리는데 이 Lock을 잡고 있는 쓰레드도 똑같이 다른 Lock을 기다리며 서로 블록 상태에 놓이는 것을 말한다. 데드락은 다수의 쓰레드가 같은 Lock을 동시에 다른 명령에 의해 획득하려할 때 발생할 수 있다.

[해결방안]

  • 자원 유형에 따라 우선 순위를 선정하여 자원을 선점하게 한다.
  • 공유 불가능한 상호 배제의 조건을 제거한다.

[JVM의 역할]
JVM은 자바를 실행하기 위한 가상기계라고 할 수 있다. JVM은 Java Byte Code를 OS에 맞게 해석해주는 역할을 한다.

[interface vs abstract]

  • Interface
    • 일종의 추상 클래스
    • 오직 추상메서드와 상수만을 멤버로 갖는다.
    • Implements키워드를 사용한다.
    • 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있도록 한다.
    • 다중 상속이 가능하다.
  • Abstract
    • 추상메서드를 하나 이상 가진 클래스
    • 자신의 생성자로 객체 생성이 불가능하다.
    • 하위 클래스를 참조하여 상위 클래스의 객체를 생성
    • 하위 클래스를 제어하기 위해 사용한다.

[다형성]

  • 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다.

[스프링의 MVC패턴]

  • MVC란 사용자 인터페이스를 성공적이며 효과적으로 데이터 모형에 관련 시키기 위한 방법론 또는 설계 방식중 하나이다.

  • MVC패턴은 목적 코드의 재사용에 유용한 것은 물론, 사용자 인터페이스와 응용프로그램 개발에 소요되는 시간을 현저하게 줄여주는 형식이라고 평가받는다.

  • MVC의 구성요소

    • Model: 소프트웨어 응용과 그와 관련된 고급 클래스 내의 논리적 데이터 기반 구조를 표현, 이 목적 모형은 사용자의 인터페이스에 관한 어떠한 정보도 갖고 있지 않다.
    • View: 사용자 인터페이스 내의 구성요소들을 표현
    • Controller: Model과 View를 연결하고 있는 클래스를 대표, Model과 View내의 클래스들 간 정보를 교환하는데 사용

[AOP]
AOP는 관점 지향 프로그래밍(Aspect Oriented Programming)의 약자로, 기존의 OOP에서 기능별로 클래스를 분리했음에도 불그하고 공통적으로 반복되는 중복코드가 발생하는 단점을 해결하고자 나온 방식으로 개발코드에서 비지니스 로직에 집중하고 실행시에 비지니스 로직 앞, 뒤 등 원하는 지점에 해당 공통 관심사를 수행할 수 있게 함으로서 중복 코드를 줄일 수 있는 방식이다.

[DI]
DI는 Dependency Injection의 약자로 객체들 간의 의존성을 줄이기 위해 사용되는 Spring의 IOC컨테이너의 구체적인 구현 방식이다.
DI는 기존처럼 개발코드 부분에서 객체를 생성하는 것이 아니라, 팩토리 패턴처럼 객체의 생성과 데이터를 주입만 담당하는 Factory에 해당하는 별도의 공간에서 객체를 생성하고 데이터간의 의존성을 주입해 개발코드에서는 이를 가져다 씀으로서 의존하는 방식이다. Factory패턴의 Factory Class의 역할을 스프링의 환경설정 파일이 담당한다.

profile
"계획에 따르기보다 변화에 대응하기를"

0개의 댓글