분류 전체보기 85

자바의 내부 클래스

내부 클래스(Inner Class)란? 클래스 내부에 선언한 클래스로 이 클래스를 감싸고 있는 외부 클래스와 밀접한 연관이 있는 경우가 많고, 다른 외부 클래스에서 사용할 일이 거의 없는 경우에 내부 클래스로 선언해서 사용함 중첩 클래스라고도 함 종류: 인스턴스 내부 클래스, 정적(static) 내부 클래스, 지역(local) 내부 클래스, 익명(anonymous) 내부 클래스 인스턴스 내부 클래스 내부적으로 사용할 클래스를 선언 (private으로 사용하는 것을 권장) 외부 클래스가 생성된 후 생성됨 (정적 내부 클래스와 다름) private이 아닌 내부 클래스는 다른 외부 클래스에서 생성할 수 있음 내부 클래스 InClass를 사용하기 위해선 먼저 외부 클래스 OutClass가 생성되어야 하는데, s..

Java 2021.05.05

자바 정렬 인터페이스, Comparable과 Comparator

자료구조를 공부하다보면 필연적으로 정렬에 대해 배우게 됩니다. 예를 들어 TreeSet 은 내부에 BST(Binary Search Tree)가 구현되어 있는데, 이때 어떤 것을 기준으로 어떻게 정렬할 것인지에 대한 정의가 되어 있어야 정상적으로 동작이 됩니다. String과 Integer 같은 클래스들은 Comparable 인터페이스를 이미 구현하고 있어서 TreeSet 인 경우에 오름차순(사전편찬순) 정렬이 수행됩니다. TreeSet 클래스 활용하기 객체의 정렬에 사용하는 클래스 Set 인터페이스를 구현하여 중복을 허용하지 않고, 오름차순이나 내림차순으로 객체를 정렬할 수 있음 내부적으로 이진검색트리(BST)로 구현됨 BST에 저장하기 위해 각 객체를 비교해야 함 비교 대상이 되는 객체에 Compara..

Java 2021.05.05

자바의 유용한 클래스 - Class 클래스

Class 클래스 자바의 모든 클래스와 인터페이스는 컴파일 후 class 파일이 생성됨 Class 클래스는 컴파일 된 class 파일을 로드하여 객체를 동적 로드하고, 정보를 가져오는 메서드가 제공됨 Class.forName("클래스 이름") 메서드로 클래스를 동적으로 로드함 Class c = Class.forName("java.lang.String"); 인자 "java.lang.String" 는 문자열 타입이기 때문에 컴파일 단계에서 오타로 인한 에러를 발견하기 어려우므로 주의! 클래스 이름으로 직접 Class 클래스 가져오기 Class c = String.class; 생성된 인스턴스에서 Class 클래스 가져오기 String s = new String(); Class c = s.getClass(); ..

Java 2021.04.28

자바의 메모리 영역과 가상 메서드

자바의 변수들이 사용되는 메모리 영역 지역 변수는 스택 영역 지역 변수 중 참조 변수가 참조하는 인스턴스 변수는 힙 영역(동적 메모리 영역) static 변수는 데이터 영역 (처음에 프로그램이 메모리에 로드될 때 생성되고 공유되어 사용되다가 프로그램이 업로드될 때 사라짐) 메서드는 어떻게 호출되고 실행되는가? 자바는 모든 메서드가 가상 메서드임 메서드(함수)의 이름은 주소값을 나타냄 메서드는 명령어의 set이고(Instruction Set), 프로그램이 로드되면 메서드 영역(코드 영역)에 명령어 set이 위치함 해당 메서드가 호출되면 명령어 set이 있는 주소를 찾아 명령어가 실행됨 이때 메서드에서 사용하는 변수들은 스택 메모리에 위치하게 됨 따라서 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 ..

Java 2021.04.17

[HTTP] 8. HTTP 헤더 - 캐시와 조건부 요청

1. 캐시 기본 동작 (데이터 크기는 HTTP 헤더 0.1M, HTTP 바디 1.0M 로 총 1.1M 로 가정한다.) 캐시가 없을 때 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다. 인터넷 네트워크는 매우 느리고 비싸다. 브라우저 로딩 속도가 느리다. 캐시 적용 요청이 오면 http 헤더의 cache-control 부분에 캐시 가능 시간(유효 시간)을 응답으로 보낸다. 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 된다. 비싼 네트워크 사용량을 줄일 수 있다. 브라우저 로딩 속도가 매우 빠르다. 캐시 적용했지만 캐시 가능 시간이 지난 경우 캐시 유효 시간이 초과하면, 서버를 통해 데이터를 다시 조회하고 캐시를 갱신한다. 이때 다시 네트워크 다운로드가 발생한다...

GoF 디자인 패턴

디자인 패턴 자주 사용하는 설계 패턴을 정형화해서 이를 유형별로 가장 최적의 방법으로 개발할 수 있도록 정해둔 설계 GoF(Gang of Four) 디자인 패턴 여러 프로그래머들의 소프트웨어 설계 방식을 공유하기 위해 나온 것으로, 객체지향 개념에 따른 설계 중 재사용할 경우 유용한 디자인 패턴을 정리한 것 디자인 패턴의 장점 개발자 간의 원활한 소통 소프트 웨어 구조 파악 용이 재사용을 통한 개발시간 단축 설계 변경 요청에 대한 유용한 대처 생성 패턴 - 객체를 생성하는 것과 관련된 패턴으로, 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하고 코드의 유연성을 높여줌 Factory Method Singleton Prototype Builder Abstract Factory (Chaining) ..

Spring 2021.04.14

[HTTP] 7. HTTP 헤더 - 일반 헤더

[1] HTTP 표준의 변화 - 1999년, RFC2616 (현재 폐기됨) HTTP 헤더: HTTP 전송에 필요한 모든 부가정보 (예) 메세지 바디의 내용, 메세지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등 다수가 존재함 General 헤더: 메세지 전체에 적용되는 정보 Request 헤더: 요청 정보 Reponse 헤더: 응답 정보 Entity 헤더: 엔티티 본문의 데이터를 해석할 수 있는 정보 HTTP 바디 메세지 본문(message body)은 엔티티 본문(entity body)을 전달하는데 사용 엔티티 본문은 요청이나 응답에서 전달할 실제 데이터 - 2014년, RFC7230~7235 등장 엔티티(Entity) → 표현(Representation) 표현 = 표현..

[기술면접] 백엔드 관련 (Java, Spring, JPA 등)

JVM과 Java 프로그램 실행 과정을 설명하세요. JVM이란 Java Virtual Machine의 약자로 자바 프로그램을 자바 API를 기반으로 실행하는 역할을 한다. 자바와 OS 사이에서 중개자 역할을 수행하여 자바가 OS에 구애받지 않게 해준다. 자바 프로그램 실행 과정은 프로그램이 실행되면 JVM이 OS로부터 해당 프로그램이 필요로 하는 메모리를 할당받고, 자바 바이트코드로 변환된 class 파일을 클래스로더를 통해 JVM에 로딩한다. 로딩된 class 파일은 execution engine을 통해 해석되고 실행된다. 필요시 garbage collection을 수행해서 불필요하게 할당된 메모리를 해제한다. Garbage Collection이 필요한 이유? 자바 프로그램은 메모리를 명시적으로 지정해..

[기술면접] 웹개발자 기초 지식

스크립트 언어와 컴파일 언어를 나열하고 차이점을 설명하세요. 스크립트 언어로는 python, javascript 등이 있으며, 컴파일 언어로는 C/C++, JAVA 등이 있음 컴파일 언어는 컴파일러를 통해 사전에 컴파일되어 기계어 상태로 실행되므로 실행이 빠르고, 또한 컴파일 단계에서 전체 코드를 기계어로 변환할 때 최적화 작업을 진행하여 실행 시간을 보다 빠르게 할 수 있음 이에 반해 스크립트 언어는 컴파일 단계없이, 실행 단계에서 한 줄씩 기계어로 번역 후 실행되므로 통상 컴파일 언어보다 실행이 느리고, 또한 전체 코드에 대한 실행 코드 최적화가 어려움 객체지향 프로그래밍(OOP)이란 무엇인가? 현실 세계의 사물을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션의 특징을 뽑아와 프로그래밍하는..

[기술면접] CS(Computer Science) 관련

1. 운영체제 프로세스와 스레드의 차이는? 프로세스는 실행 중인 프로그램, 스레드는 프로세스의 실행 단위 프로세스는 운영체제로부터 자원을 할당 받아 실행하고, 스레드는 프로세스로부터 자원을 할당 받아 실행함 하나의 프로세스 안에서 여러 스레드 생성이 가능하며, 각 스레드는 개별 스택을 가지고 프로세스의 전역 메모리 공간을 공유하며 프로그램을 실행함 보통 프로세스는 코드/데이터/스택/힙 메모리 영역을 기반으로 실행하며, 스레드는 프로세스 안에서 개별적인 스택을 가지고 코드/데이터/힙 영역을 공유하며 실행함 프로세스 제어 블록(PCB; Process Control Block)이란? PCB는 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조임 운영체제는 프로세스를 관리하기 위해 프로세스의 ..