Tech Interview/Java

    직렬화와 모듈

    직렬화 - 객체안의 멤버 변수들을 유지한 채로 파일에 저장하거나 네트워크를 통해 전달할 수 있는 기능 - 객체 멤버의 변수 값을 바이트 단위로 변환해 파일 또는 네트워크를 통해 송수신 가능하게 만듦 - 메서드, 생성자, static 변수는 직렬화 대상에서 제외 - 먼저 객체 직렬화가 가능하도록 java.io.Serializable 인터페이스 구현 모듈 - Java 9 부터 모듈이라는 새로운 수준의 추상화 도입 - 여러 패키지와 이미지 등의 자원을 모아 놓은 컨테이너 - JDK 9부터 자바 API의 모든 클래스(자바 실행 환경)를 패키지 기반에서 모듈로 완전히 재구성함 - 응용프로그램도 여러 개의 모듈로 분할하여 작성 가능 - 자바 API를 여러 모듈로 분할하여 응용 프로그램의 실행에 적합한 모듈들로만 실..

    JDBC

    Statement 객체 - 정적인 SQL문 실행 결과를 돌려주는 객체 - Connection의 createStatement() 메서드를 호출 PreparedStatement 객체 - Statement 하위 인터페이스로 프리 컴파일(전 처리)된 SQL문을 나타내는 객체 Statement 와 PreparedStatement 차이점 - 캐시 사용여부. 전자는 매번 쿼리 실행할 때마다 컴파일을 하기에 성능상 이슈 발생 후자는 컴파일이 미리 되어 있어 좋은 성능, 특수 문자를 자동으로 파싱하여 SQL Injection 공격 방지 CallableStatement 객체 - 프로시저 호출할 때 사용 Connection Pool(DBCP : Database Connection Pool) - DB와 연결된 커넥션을 미리 ..

    람다식

    람다식(Lambda Expression) - 메서드를 하나의 식(Expression)으로 표현한 것 - 함수 지향 언어에 가까움 - 메소드의 이름 및 반환 값이 없어져 익명 함수 라고 함 - 매개 변수를 가진 코드블럭이지만 런타임 시에는 익명 구현 객체를 생성 - 하나의 추상 메서드를 가진 인터페이스는 람다식 사용 가능 - JDK 8부터 지원 - 예시) ( 파라미터명 ) -> { 수행할 코드 }

    스레드와 동기화

    스레드(Thread) - 작업 스케줄러(Job Scheduler)에 의해 시간을 배정받아 CPU에서 작업할 수 있는 단위 - 실제 CPU 시간을 할당받아 수행되는 실행 단위 - 하나의 애플리케이션이 실행되기 위해서는 최소 하나의 스레드가 필요. 스레드는 프로그램 코드를 실행하는 단위로 프로세스에 할당된 메모리 영역에서 실행되고, 프로세스에 할당된 시스템 리소스를 공유 동기화(Synchronized) - 프로세스 또는 스레드들이 수행되는 시점을 조절하여 서로가 알고 있는 정보를 일치하는 것 - Thread-safe : 여러 스레드가 한 리소스를 사용하려 할 때, 사용하려는 스레드 하나를 제외한 나머지 스레드들은 리소스를 사용하지 못하도록 막는 것을 말한다. 락(Lock) - 락을 가지고 있는 스레드만 해당..

    제네릭과 컬렉션

    제네릭(Generic) - 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법 - 미리 정의된 하나의 메서드 또는 멤버 변수에 서로 다른 자료형의 결과를 얻을 수 있도록 하는 기능 - 컴파일 할 때 타입 체크를 통해 실행시 발생하는 타입에러를 사전에 방지. 불필요한 타입 변환(casting)을 안하므로 프로그램의 안전성 향상 컬렉션(Collection) Set - 순서가 없고, 중복을 허용하지 않는 자료구조 - 주요 구현 클래스 : HashSet List - 순서가 있는 요소들의 집합으로 배열과 같은 구조이나 가변적 길이를 가지고 있음. Set 과 다르게 중복 요소 추가 가능 - 주요 구현 클래스 : Vector, ArrayList, LinkedList, St..

    예외 처리

    예외 처리 - 예외 : 프로그램 실행 중에 명령어의 정상적인 흐름을 방해하는 이벤트 - 자바에서 예외는 하나의 객체 - 에러 발생시 에러 객체를 생성하여 자바 런타임 시스템에 전달 예외 처리의 장점 - 실행 코드와 에러 처리 코드 분류 - 메서드의 콜 스택(Call Stack)에 에러를 차례대로 보낼 수 있음 - 에러 타입을 종류별로 분류 가능 StackOverflowException - Java 프로그램 또는 JVM에서 작성된 모든 스레드는 Java 힙과 관계 없이 고유 스택 공간이 존재 - 지정한 스택 메모리 사이즈보다 더 많은 스택 메모리를 사용하게 되어 에러가 발생하는 상황

    자바 주요 클래스

    Immutable - 생성 후 변경 불가능한 객체 - set 메서드가 없고 void 리턴 타입의 메서드도 존재하지 않음 - 멤버 변수 값 변경 불가능 - 종류 : String, Boolean, Integer, Float, Long 등 String - 문자열을 나타내는 클래스. 문자열과 관련된 작업을 위한 메서드 제공 - 모든 문자열 리터럴은 String 클래스의 인스턴스로 구현 - final 클래스이므로 상속 불가. 하위 클래스 가질 수 없음 - 인스턴스가 한 번 생성되면 그 값은 읽기만 가능하며 변경 불가 - 문자열 변경시 새로운 String 인스턴스가 생성되며, 기존 인스턴스는 Garbage Collector의 대상이 됨 - "+" 연산자를 이용하여 문자열 결합 가능. 다른 클래스 객체와 "+"를 사..

    객체 지향

    객체지향 프로그래밍(Object-Oriented Programming) - 실제 세계를 모델링하여 소프트웨어를 개발 - 현실 세계의 개체(Entity)를 속성(Attribute)과 메소드(Method)가 결합된 형태의 객체(Object)로 표현 - 객체들 간의 상호작용을 통해 로직 구성 객체 지향 언어 종류 - Java, Python, C++, C# 등 객체 지향 프로그램의 특징 - 상태(데이터) 중심 - 개발의 효율성 및 편리성 높이는데 목적 - 프로그램 모듈 재사용 가능 객체(Object) - 상태를 나타내는 필드(변수)와 행동을 구현하는 메소드로 구성된 모듈 - 개발 시간(design-time)에는 레퍼런스 변수로 정의 - 실행 시간(run-time)에는 클래스의 인스턴스를 의미 - 실제 세계에 존..