[OOP]
[자바의 메모리 영역]
1. 메서드 영역: Static변수, 전역변수, 코드에서 사용되는 Class정보 등이 올라간다. 코드에서 사용되는 클래스를 로더로 읽어 클래스별로 런타임 필드데이터, 메서드데이터등을 분류해 저장한다.
2. 스택(Stack): 지역변수, 함수등이 할당되는 LIFO방식의 메모리
3. 힙(Heap): new연산자를 사용하여 동적할당된 객체들이 저장되며 가비지 컬렉션에 의해 메모리 관리가 된다.
4. 메모리 상수풀 영역: 힙 영역에 생성되어 자바 프로세스 종료까지 계속 유지되는 메모리 영역이다. 기본적으로 JVM에서 관리하며 프로그래머가 작성한 상수에 대해 최우선적으로 찾아보고 없을 경우 상수풀에 추가한 이우 그 주소 값을 리턴한다. 그로인해 메모리 절약 효과가 있다.
[인터페이스]
인터페이스는 구현부가 없는 추상 메서드로 이루어진 클래스로, abstract키워드를 붙이지 않아도 자동으로 모든 메서드는 추상메서드로 정의가 된다. 또한 변수도 자동으로 final static키워드가 붙게 된다.
[JDBC]
자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.
[직렬화]
자바에서 입출력에 사용되는 것은 스트림이라는 데이터 통로를 통해 이동했다. 하지만, 객체는 바이트형이 아니라서 스트림을 통해 파일에 저장하거나 네트워크로 전송할 수 없다. 따라서 객체를 스트림을 통해 입출력하려면 바이트 배열로 변환하는 것이 필요한데 이를 '직렬화'라고 한다. 반대로 스트림을 통해 받은 직렬화된 객체를 원래 모양으로 만드는 과정을 역질렬화라고 한다.
[SerialVersionUID를 선언해야 하는 이유]
JVM은 직렬화와 역직렬화를 하는 시점의 클래스에 대한 버전 번호를 부여한다. 만약 그 시점에 클래스의 정의가 바껴있다면 새로운 버전 번호를 할당한다. 그래서 직렬화할 때 버전 번호와 역직렬화를 할 때의 버전 번호가 다르면 역직렬화가 불가능하게 될 수 있다. 이런 문제를 해결하기 위해 SerialVersionUID를 사용한다.
[리플렉션]
리플렉션은 컴파일러를 무시하고 런타임 상황에서 메모리에 올라간 클래스나 메서드등의 정의를 동적으로 찾아서 조작할 수 있는 일련의 행위를 말한다.
[Servlet vs JSP]
[제네릭(Generic)]
[pojo]
Pain Old Java Object의 축약어로 오래된 방식의 자바 오브젝트를 의미한다. J2EE등의 중량 프레임워크들을 사용하면서 해당 프레임워크에 종석된 무거운 객체를 만들게 된 것에 반발하여 특정 자바 모델이나 기능, 프레임워크등을 따르지 않는 자바 오브젝트를 지칭하는 말로 사용되었다.
[박싱 vs 언박싱]
[데드락]
데드락이란, 둘 이상의 쓰레드가 Lock을 획득하기 위해 기다리는데 이 Lock을 잡고 있는 쓰레드도 똑같이 다른 Lock을 기다리며 서로 블록 상태에 놓이는 것을 말한다. 데드락은 다수의 쓰레드가 같은 Lock을 동시에 다른 명령에 의해 획득하려할 때 발생할 수 있다.
[해결방안]
[JVM의 역할]
JVM은 자바를 실행하기 위한 가상기계라고 할 수 있다. JVM은 Java Byte Code를 OS에 맞게 해석해주는 역할을 한다.
[interface vs abstract]
[다형성]
[스프링의 MVC패턴]
MVC란 사용자 인터페이스를 성공적이며 효과적으로 데이터 모형에 관련 시키기 위한 방법론 또는 설계 방식중 하나이다.
MVC패턴은 목적 코드의 재사용에 유용한 것은 물론, 사용자 인터페이스와 응용프로그램 개발에 소요되는 시간을 현저하게 줄여주는 형식이라고 평가받는다.
MVC의 구성요소
[AOP]
AOP는 관점 지향 프로그래밍(Aspect Oriented Programming)의 약자로, 기존의 OOP에서 기능별로 클래스를 분리했음에도 불그하고 공통적으로 반복되는 중복코드가 발생하는 단점을 해결하고자 나온 방식으로 개발코드에서 비지니스 로직에 집중하고 실행시에 비지니스 로직 앞, 뒤 등 원하는 지점에 해당 공통 관심사를 수행할 수 있게 함으로서 중복 코드를 줄일 수 있는 방식이다.
[DI]
DI는 Dependency Injection의 약자로 객체들 간의 의존성을 줄이기 위해 사용되는 Spring의 IOC컨테이너의 구체적인 구현 방식이다.
DI는 기존처럼 개발코드 부분에서 객체를 생성하는 것이 아니라, 팩토리 패턴처럼 객체의 생성과 데이터를 주입만 담당하는 Factory에 해당하는 별도의 공간에서 객체를 생성하고 데이터간의 의존성을 주입해 개발코드에서는 이를 가져다 씀으로서 의존하는 방식이다. Factory패턴의 Factory Class의 역할을 스프링의 환경설정 파일이 담당한다.