요약

3. 자바 용어 요약(2) - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 1. 13. 10:00

컴파일 에러 : 컴파일할 때 발생하는 에러

런타임 에러 : 실행할 때 발생하는 에러

논리적 에러 : 의도와 다르게 동작(실행시)

에러 : 심각한 오류
예외 : 다소 미약한 오류

예외처리의 정의 : 발생할 수 있는 예외의 발생에 대비한 코드를 작성
목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

Exception과 자손들 : 예외처리 필수 - 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
주요 예외들
IOException : 입출력 작업 중 발생하는 예외
SQLException : 데이터베이스 접근 및 쿼리 실행 중 발생하는 예외
FileNotFoundException : 지정된 파일을 찾을 수 없을 때 발생하는 예외
ClassNotFoundException : JVM이 지정된 클래스를 찾을 수 없을 때 발생하는 예외
ParseException : 문자열을 특정 형식으로 파싱할 때 형식이 맞지 않으면 발생하는 예외
TimeoutException : 특정 작업이 지정된 시간 내에 완료되지 않을 때 발생하는 예외


RuntimeException과 자손들 : 예외처리 선택 - 프로그래머의 실수로 발생하는 예외
주요 예외들
NullPointerException : null참조에서 메서드나 필드에 접근하려 할 때 발생하는 예외
IllegalArgumentException : 메서드에 잘못된 인수가 전달되었을 때 발생하는 예외
NumberFormatException : 문자열을 숫자로 변환할 때 형식이 올바르지 않으면 발생하는 예외
IndexOutOfBoundsException : 인덱스가 유효한 범위를 벗어났을 때 발생하는 예외
ArithmeticException : 수학적 연산에서 오류가 발생할 때 일어나는 예외
UnsupportedOperationException : 지원되지 않는 연산을 시도할 때 발생하는 예외
ClassCastException : 객체를 잘못된 타입으로 캐스팅하려 할 때 발생하는 예외


printStackTrace() : 예외발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.

getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

finally블럭 : 예외의 발생여부와 관계없이 실행되어야 하는 코드

메서드에 예외 선언하기 : 호출한 메서드로 예외를 전달해주는 것

예외 되던지기 : 예외를 처리한 후에 다시 예외를 생성해서 호출한 메서드로 전달하는 것

연결된 예외 : 예외 A가 예외 B를 발생시켰다면, A를 B의 원인예외 라고 한다.
여러 예외를 큰 분류의 예외로 묶을 때, 연결된 예외로 처리
필수예외를 선택예외로 바꿀 때 사용

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Object클래스의 메서드 : 모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있다.

equals(Object obj) : 객체 자신과 주어진 객체(obj)를 비교한다.
Object클래스에 정의된 equals()는 참조변수 값을 비교한다.

hashCode() : 객체의 해시코드(int타입의 정수)를 반환하는 메서드
다량의 데이터를 저장&검색하는 해싱기법에 사용된다.

toString() : 객체의 정보를 문자열(String)로 제공할 목적으로 정의된 메서드

getClass() : 자신이 속한 클래스의 Class객체를 반환하는 메서드

String클래스의 특징 : 문자형 배열(char[])과 그에 관련된 메서드들이 정의되어 있다.
String인스턴스의 내용은 바꿀 수 없다.(immutable)

빈 문자열 : 내용이 없는 문자열.
크기가 0인 char형 배열을 저장하는 문자열

StringBuffer클래스의 특징 : 내용 변경 가능(mutable)

Math클래스 : 수학계산에 유용한 메서드로 구성되어 있다.(모두 static메서드)

wrapper클래스 : 기본형을 클래스로 정의한 것

Number클래스 : 숫자를 멤버변수로 갖는 클래스의 조상(추상클래스)

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Calendar : 날짜와 시간을 다룰 목적으로 만들어진 클래스
추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다.

DecimalFormat : 숫자를 다양한 형식으로 출력할 수 있게 해준다.

SimpleDateFormat : 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다.

MessageFormat : 데이터를 정해진 양식에 맞춰 출력할 수 있게 해준다.

java.time패키지 : Date, Calendar의 단점을 보완하기 위해 추가된 패키지
이 패키지에 속한 클래스들을 모두 불변(immutable)이다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

컬렉션 : 여러 객체(데이터)를 모아 놓은 것을 의미

프레임웍 : 표준화, 정형화된 체계적인 프로그래밍 방식

컬렉션 프레임웍 : 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식
컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공

컬렉션 클래스 : 다수의 데이터를 저장할 수 있는 클래스(Vector, ArrayList, HashSet)

List : 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.
구현클래스 : ArrayList, LinkedList, Stack, Vector 등

Set : 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.
구현클래스 : HashSet, TressSet, LinkedHashSet 등

Map : 키와 값의 쌍으로 이루어진 데이터의 집합
순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.
구현클래스 : HashMap, TreeMap, Hashtable, Properties 등

Vector : 저장순서가 유지되고 중복을 허용하는 동기화된 클래스(배열기반)

ArrayList : 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간이 짧다.
단점 : 크기변경 불가, 중간에 데이터의 추가 삭제에 시간이 많이 걸린다.

LinkedList : 불연속적으로 존재하는 데이터를 연결
doubly linked list : 이중 연결리스트 접근성 향상

스택 : LIFO, 마지막에 저장한 것을 제일 먼저 꺼낸다.
큐 : FIFO, 제일 먼저 저장한 것을 제일 먼저 꺼낸다.

Deque : Stack과 Queue의 결합
우선순위큐(PriorityQueue) : 우선순위가 높은 것부터 꺼냄(null저장불가)
블락킹큐(BlockingQueue) : 비어 있을 때 꺼내기와, 가득 차 있을 때 넣기를 지정된 시간동안 지연시킴(멀티쓰레드)

Iterator : 컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스
컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것

Arrays : 배열을 다루기 편리한 메서드제공

Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
Comparable : 기본 정렬기준을 구현하는데 사용

HashSet : Set인터페이스를 구현한 대표적인 컬렉션 클래스

TreeSet : 범위 검색과 정렬에 유리한 컬렉션 클래스
범위 검색과 정렬에 유리한 이진 검색 트리로 구현

HashMap : Map 인터페이스를 구현한 대표적인 컬렉션 클래스
해싱기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.

TreeMap : 범위 검색과 정렬에 유리한 컬렉션 클래스
이진 검색 트리의 구조로 키와 값의 쌍으로 이루어진 데이터를 저장

해싱 : 해시함수로 해시테이블에 데이터를 저장, 검색

Properties : 내부적으로 Hashtable을 사용하며, key와 value를 (String, String)로 저장

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

지네릭스 : 컴파일시 타입을 체크해 주는 기능
타입 안정성을 제공한다.

와일드 카드 : 여러 타입을 대입 가능

열거형 : 관련된 상수들을 같이 묶어 놓은 것

애너테이션 : 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공

애너테이션요소의 규칙 : 요소를 타입 매개변수로 정의할 수 없다.
예외 선언불가, 괄호()안에 매개변수 선언 불가, 요소의 타입은 기본형, String, enum, 애너테이션, class만 허용

@Override : 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다.

@Deprecated : 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다.

@FunctionalInterface : 함수형 인터페이스에 붙이면, 컴파일러가 올바르게 작성했는지 체크
함수형 인터페이스는 하나의 추상메서드만 가져야 한다는 제약이 있음

@SuppressWarnings : 컴파일러의 경고메시지가 나타나지 않게 억제한다.

@SafeVarargs : unchecked경고를 억제

메타 애너테이션 : 애너테이션을 위한 애너테이션

@Target : 애너테이션을 적용할 수 있는 대상의 지정에 사용

@Retention : 애너테이션이 유지되는 기간을 지정하는데 사용

@Documented : javadoc으로 작성한 문서에 포함시키는데 사용

@Inherited : 애너테이션을 자손 클래스에 상속하고자 할 때 사용

@Repeatable : 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용

@Native : native메서드에 의해 참조되는 상수에 붙이는 애너테이션

Annotation : 모든 애너테이션의 조상이지만 상속 불가

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

프로세스 : 실행 중인 프로그램, 자원과 쓰레드로 구성

쓰레드 : 프로세스 내에서 실제 작업을 수행

동시성(병행) : 여러 작업을 같이 진행 하는 것

병렬 : 큰 작업을 작게 쪼개서 여럿이 돌리는 것

멀티 프로세싱 : 동시에 여러 프로세스를 실행시키는 것

멀티 쓰레딩 : 하나의 프로세스 내에 동시에 여러 쓰레드를 실행시키는 것
장점 : 시스템 자원을 보다 효율적으로 사용할 수 있다.
단점 : 동기화에 주의, 교착상태가 발생하지 않게 주의해야한다.

쓰레드 그룹 : 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것
모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.

데몬 쓰레드 : 일반 쓰레드의 작업을 돕는 보조적인 역할
일반 쓰레드가 모두 종료되면 자동적으로 종료된다.

쓰레드의 실행제어 메서드
sleep() : 현재 쓰레드를 지정된 시간동안 멈추게 한다.
예외처리를 해야한다.
interrupt() : 대기상태인 쓰레드를 싱행대기 상태로 만든다.
suspend(), resume(), stop() : 쓰레드의 실행을 일시정지, 재개, 완전정지 시킨다. 교착상태에 빠지기 쉽다.
yield() : 다음 쓰레드에게 양보하고, 자신은 실행대기한다.
join() : 지정된 시간동안 특정 쓰레드가 작업하는 것을 기다린다.

쓰레드의 동기화
synchronized : 한 번에 하나의 쓰레드만 객체에 접근할 수 있도록 객체에 락을 걸어서 데잍의 일관성을 유지
wait() : 객체의 락을 풀고 쓰레드를 해당 객체의 waiting pool에 넣는다.
notify() : waiting pool에서 대기중인 쓰레드 중의 하나를 깨운다.
notifyAll() : waiting pool에서 대기중인 모든 쓰레드를 깨운다.

기아 현상 : 쓰레드가 통지를 받지 못하고 계속 기다리게 되는 상태

작업 훔치기 : 작업을 나눠서 다른 쓰레드의 작업 큐에 넣는 것

Condition
ReentrantLock : 재진입이 가능한 lock
ReentrantReadWriteLock : 읽기에는 공유적이고, 쓰기에는 배타적인 lock
StampedLock : 낙관적인 lock

재진입 : 같은 객체에 대한 락을 가지고 있으면 다른 동기화 블럭도 락을 다시 얻지않고 들어갈 수 있다.

낙관적인 lock : 읽기 카운트가 계속 올라가면 Write가 계속 기다려야 하는데, 낙관적인 lock은 카운트 증가가 없음
쓰기와 읽기가 충돌할 때만 쓰기가 끝난 후에 읽기 lock을 건다.

Copy Of Read : 읽을 때는 복사본을 주고 쓰기를 할 때는 원본을 준다

volatile : cache와 메모리간의 불일치 해소

fork & join 프레임웍 : 작업을 여러 쓰레드가 나눠서 처리하는 것을 쉽게 해준다.
fort() : 작업을 큐에 넣는다. (비동기)
join() : 작업의 결과를 합친다. (동기)
RecursiveAction : 반환값이 없는 작업을 구현할 때 사용
RecursiveTask : 반환값이 있는 작업을 구현할 때 사용

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

람다식 : 함수를 간단한 식으로 표현하는 방법

함수와 메서드의 차이 : 함수는 클래스에 독립적, 메서드는 클래스에 종속적

함수형 인터페이스 : 단 하나의 추상 메서드만 선언된 인터페이스

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

java.lang.Runnable - void run : 매개변수도 반환값도 없음
Supplier<T> - T get() : 매개변수는 없고 반환값만 있음
Consumer<T> - void accept(T t) : 매개변수만 있고 반환값이 없음
Function<T,R> - R apply(T t) : 일반적인 함수. 하나의 매개변수를 받아서 결과를 반환
Predicate<T> - boolean test(T t) : 조건식, 매개변수는 하나 반환 타입은 boolean

BiConsumer<T,U> void accept(T t, U u): 두개의 매개변수만 있고, 반환값이 없음
BiPredicate<T,U> - boolean test(T t, U u): 조건식, 매개변수는 둘, 반환값은 boolean
BiFunction<T,U,R> - R apply(T t, U u): 두개의 매개변수를 받아서 하나의 결과를 반환

UnaryOperator<T> - R apply(T t): 매개변수와 결과의 타입이 같다.
BinaryOperator<T> - R apply(T t, T t) : 매개변수와 결과의 타입이 같다.

기본형을 사용하는 함수형 인터페이스 - 성능때문에 사용
DoubleToIntFunction - int applyAsInt(double d) : AToBFunction 입력이 A타입 출력이 B타입
ToIntFunction<T> - int applyAsInt(T value) : ToBFunction 출력이 B타입  입력이 지네릭 타입
IntFunction<R> - R apply(int value) : AFunction 입력이 A타입 출력은 지네릭 타입
ObjIntCunsumer<T> - void accept(T t, int i) : ObjAFunction 입력이 T, int 출력이 없다

Function
compose() : 여러 함수를 하나의 함수로 결합( 오른쪽에서 왼쪽)
andThen() : 여러 함수를 하나의 함수로 결합(왼쪽에서 오른쪽)
identity() : 입력값을 그대로 반환하는 함수

Predicate
and() : 두 조건이 모두 참일 때만 참을 반환
or() : 두 조건 중 적어도 하나가 참일 때 참을 반환
negate() : 결과를 반전시키는 함수
isEqual() : 두 객체의 동등성을 비교

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

람다식의 메서드 참조 : 하나의 메서드만 호출하는 람다식('클래스이름::메서드이름' or '참조변수::메서드이름')

스트림 : 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것

중간 연산 :연산결과가 스트림인 연산, 반복적으로 적용가능
Stream<T> distinct() : 중복제거
Stream<T> filter(Predicate<T> predicate) : 조건에 안 맞는 요소 제외
Stream<T> limit(long maxSize) : 스트림의 일부를 잘라낸다.
Stream<T> skip(long n) : 스트림의 일부를 건너뛴다.
Stream<T> peek(Consumer<T> action) : 스트림의 요소에 작업수행
Stream<T> sorted(Comparator<T> comparator) : 스트림의 요소를 정렬한다.

Stream<T> map(Function<T,R> mapper) : 스트림을 스트림으로 변환( Stream<Files> -> Stream<String>)
Stream<T> flatMap(Function<T, Stream<R>> mapper) : 스트림의 스트림을 스트림으로 변환(배열 여러개를 하나로 합칠때 사용)

최종 연산 : 연산결과가 스트림이 아닌 연산. 스트림의 요소를 소모
void forEach(Consumer<? super T> action) : 각 요소에 지정된 작업 수행 - 병렬스트림(parallel())인 경우 순서가 보장되지 않음
void forEachOredered(Consumer<? super T> action) : 각 요소에 지정된 작업 수행 - 병렬스트림(parallel())인 경우에도 순서가 보장됨
long count() : 스트림의 요소의 개수 반환
Optional<T> max(Comparator<? super T> comparator) : 스트림의 최대값을 반환
Optional<T> min(Comparator<? super T> comparator) : 스트림의 최소값을 반환
Optional<T> findAny() : 스트림의 요소 하나를 반환(아무거나) - 병렬 스트림에 사용
Optional<T> finaFirst() : 스트림의 요소 하나를 반환(첫번째요소) - 순차 스트림에 사용
boolean allMatch(Predicate<T> p) : 주어진 조건을 모든 요소가 만족시키는가
boolean anyMatch(Predicate<T> p) : 주어진 조건을 하나의 요소라도 만족하는지
boolean noneMatch(Predicate<T> p) : 주어진 조건을 모든 요소가 만족시키 않는가
A[] toArray(IntFunction<A[]> generator) : 스트림의 모든 요소를 배열로 반환

Optional<T> reduce(BinaryOperator<T> accumulator) : 스트림의 요소를 하나씩 줄여가면서(리듀싱)한다. ( 전체 )
T reduce(T identity, BinaryOperator<T> accumulator)
U reduce(U identity, BiFunction<U,T,U> accumulator, BinaryOperator<U> combiner)
R collect(Collector<T,A,R> collector) : 스트림의 요소를 수집한다.( 그룹별 reduce() )

identity : 초기값
accumulator : 이전 연산결과와 스트림의 요소에 수행할 연산 ( 누적 작업 )
combiner : 병렬처리된 결과를 합치는데 사용할 연산

임의의 수 : ints(), longs(), doubles() - 무한스트림

Optional<T> : T타입의 객체를 감싸는 래퍼 클래스
orElse("") : 저장된 값이 null일 때 "" 반환
isPresent() : Optional객체의 값이 null이면 false, 아니면 true를 반환한다

groupingBy() : n분할
partitioningBy() : 2분할