키워드 정리 | JeongKeepsCalm

키워드 정리

HTTP 기초

IP(Internet Protocol)
인터넷에서 데이터를 전송할 때 사용되는 규약

패킷
데이터를 전달하는 통신단위

TCP-IP(Transmission Control Protocol)의 4가지 특징

  1. 연결지향 TCP 3 way handshake
  2. 데이터 전달 보장
  3. 순서 보장
  4. 신뢰할 수 있는 프로토콜

3 way handshake
TCP/IP 프로토콜에서 클라이언트와 서버 간 안정적인 연결을 시작하고 확인하는 방법

DNS
Domain Name System 으로 IP 주소를 직접 기억할 필요가 없이 사람이 읽기 쉬운 문자로 변환하거나 그 반대의 작업을 수행하는 시스템이다.

URL
Uniform Resource Identifier 의 약자로 URL 과 URN 으로 분류된다.
URL( locator ): 리소스의 위치를 지정
URN( Name ): 리소스에 이름을 부여

stateful
이전 상태를 기억하고 이릉 통해 다음 작업을 수행하는 것
항상 같은 서버가 유지되어야 한다. ( 쿠키/서버 세션 등을 사용서 상태 유지 )

stateless
각 요청을 독립적으로 처리하는 것
HTTP는 무상태 프로토콜이다
아무 서버나 호출해도 된다 ( 로그인이 필요없는 단순 서비스 소개 화면 )



JAVA 기초

클래스
여러 객체(인스턴스)를 생성할 수 있는 설계도

인스턴스
클래스에서 정의한 속성과 메소드를 가지고 있어 메모리에 할당된 실체

변수
데이터를 저장하는 기본단위

GC(Garbage Collector)
아무도 참조하지 않는 인스턴스를 제거한다.

객체 지향 프로그래밍
데이터와 데이터를 조작하는 메소드를 하나의 객체에 묶는 프로그래밍 패러다임
캡슐화, 상속, 다형성 등의 개념을 통해 코드의 재사용성, 유지보수성, 확장성을 향상시킨다.

절차 지향 프로그래밍
데이터와 데이터를 조작하는 메소드가 별도로 존재하여 메소드에서 데이터를 조작하는 방식으로 프로그램이 작동된다.

캡슐화(Encapsulation)
클래스 내 필드/메소드를 외부로부터 숨겨 클래스 내부 데이터 조작을 방지한다.
클래스 내부 코드를 변경하더라도 외부에서 알 수 없으므로 코드의 유지보수성과 확장성을 향상시킨다.

생성자
객체의 초기값을 설정하며 객체 생성 시 즉시 호출된다.

생성자 오버로딩
파라미터의 개수나 타입이 다른 생성자를 추가

메소드 오버라이딩
인터페이스의 메소드를 구현체가 재정의하는 것

자바 메모리 구조
메소드 영역: 클래스들의 정보 && static 변수 보관
힙 영역: new 명령어를 사용한 인스턴스가 보관되는 영역, GC가 이루어지는 주요영역
스택 영역: 메소드를 실행할 때마다 스택 프레임이 하나씩 쌓이며 메소드가 종료되면 스택프레임이 제거된다.

Static 변수
생성된 인스턴스끼리 공유되는 변수

Static 메소드
인스턴스 생성 필요없이 호출가능한 메소드

상수(Constant)
변하지 않고, 항상 일정한 값을 갖는 수

다형성(Polymorphism)
한 객체가 여러 타입의 객체로 취급될 수 있는 능력

업캐스팅(upCasting)
부모 타입으로 변경

다운캐스팅(downCasting)
자식 타입으로 변경

추상 클래스
인터페이스와 같은 역할로 인스턴스 생성 불가능하고 부모타입의 껍데기 역할만 제공한다.

  • 객체지향 패러다임 특징
    • 추상화: 공통 속성이나 기능을 도출
    • 캡슐화: 속성과 기능를 하나로 묶은 것으로 외부에서 직접 접근할 수 없도록 숨기는 것
    • 상속: 상위 클래스의 속성과 기능을 하위 클래스가 물려받는 것
    • 다형성: 하나의 인터페이스나 클래스를 다양한 방식으로 동작하게 하는 것



자바 중급

불변 객체
객체 내부의 필드가 변하지 않는 객체( final 사용 )

스트링 풀(String Pool)
자바 실행 시점에 클래스 내 문자열 리터럴을 스캔하고 존재한다면, 메모리 효율성과 성능 최적화를 위해 String 인스턴스를 생성하여 보관하는 장소

메소드 체이닝(Method Chaining)
반환 값이 자기 자신의 참조 주소값으로 만들어진 메소드를 활용하여 연속적으로 메소드를 호출할 수 있는 프로그래밍 기법. 코드를 간결하고 가독성 좋게 만들어준다.

스트링 빌더(String Builder)
문자열을 수정하거나 연산을 수행할 때 사용하는 클래스. String 클래스와는 다르게 가변성으로 문자열 연산 시 새 인스턴스를 생성하지 않고 기존 인스턴스를 재사용하므로 메모리 효율성이 높다.

박싱(Boxing)
기본형에서 래퍼클래스로 변환

언박싱(Unboxing)
래퍼클래스에서 기본형으로 변환

리플랙션
런타임에 클래스에 정의된 생성자 필드 메소드 등의 정보를 조회하거나 조작 및 호출할 수 있는 자바 API이다.

ENUM Type 사전에 정의된 상수만으로 구성되어 유효하지 않은 값이 입력될 수 없으며 데이터의 일관성을 보장한다.

내부 클래스
클래스 내부에 위치해 있는 클래스로 외부 클래스와 연관성이 높으며 특정 클래스에서만 활용이 될 때 사용한다.

익명 클래스
클래스의 이름을 생략하고 클래스의 선언과 생성을 한번에 처리하는 클래스
특정 상위 타입을 간단히 구현해서 일회성으로 사용할 때 유용

예외 처리
프로그램의 안정성과 신뢰성을 높여주는 중요한 역할

체크 예외
개발자가 직접 명시적으로 처리해야 하는 예외

언체크 예외
RuntimeException 과 그 하위 예외로 컴파일러가 예외 체크를 하지 않는다.
throws 키워드 생략이 가능하여 생략할 경우 자동으로 예외를 던진다.



스프링

SRP(Single Responsibility Principle)
단일 책임의 원칙: 클래스는 단 하나의 기능만 가져야한다.

OCP(Open Closed Principle)
개방 폐쇄 원칙: 확장에는 열려있어야 하며, 수정에는 닫혀있어야한다.

LSP(Liskov Substitution Principle)
리스코프 치환 원칙: 하위 타입은 상위 타입으로 교체가능하다. (다형성)

ISP(Interface Segregation Principle)
인터페이스 분리 원칙: 인터페이스를 각각 목적에 맞게 분리하자.

DIP(Dependency Inversion Principle)
의존 역전 원칙: 상세한 구현에 의존하지말고 추상화( 추상클래스 / 인터페이스 )에 의존하자.

ApplicationContext
스프링 컨테이너이자 인터페이스
객체의 생성과 관리, 그리고 의존성 주입을 담당
AnnotationConfigApplicationContext > ApplicationContext(Interface) > BeanFactory(Interface)

싱글톤 패턴
클래스의 인스턴스가 딱 한 개만 생성하도록 보장하는 디자인 패턴

디스패처 서블릿(Dispatcher Servlet == Front Controller)
모든 클라이언트의 요청을 받아 요청에 맞은 컨트롤러를 찾아 호출한다.

렌더링( Rendering ): 웹페이지를 그리는 과정
렌더링 엔진(사용자가 볼 화면을 그림)
자바스크립트 엔진(JS코드를 읽어 기능을 작동)

SLF4J: 수 많은 로그 라이브러리를 통합한 인터페이스
Logback: slf4j 구현한 구현체



?

도메인: 화면, UI, 기술 인프라 등등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역