Java 36

Java / 컬렉션 프레임워크 - Hash

Set유일한 요소들의 컬렉션중복을 허용하지 않고 요소의 유무만 중요한 경우 사용 유일성 : 중복된 요소 존재 x순서 미보장 : 요소를 출력할 때 입력 순서와 다를 수 있음빠른 검색 : 요소의 유무를 빠르게 확인할 수 있도록 최적화 Hash Algorithm검색 속도를 높이기 위해 데이터의 값을 배열의 인덱스로 사용할 경우>> O(1)의 매우 빠른 검색 속도, 하지만 낭비되는 메모리 공간이 너무 많음>> 나머지 연산을 사용해서 해결 Hash Index배열의 인덱스로 사용할 수 있도록 원래의 값을 계산한 인덱스저장할 값에 나머지 연산자를 사용해서 해시 인덱스 구함>> 배열의 인덱스를 사용하기 때문에 하나의 값을 저장하거나 조회하느데 O(1)로 빠른 성능 Hash 충돌다른 값을 입력했지만 같은 해시 코드가 나..

Java 2025.03.08

Java / 컬렉션 프레임워크 - List

리스트 추상화List 자료 구조MyArrayList와 MyLinkedList는 내부 구현만 다를 뿐 닽은 기능을 제공하는 리스트>> 공통 기능을 인터페이스로 뽑아서 추상화하면 다형성을 활용한 다양한 이득 컴파일 타임 의존관계자바 컴파일러가 보는 의존관계, 클래스에 모든 의존관계가 다 나타남>> 클래스에 바로 보이는 의존관계 런타임 의존관계실제 프로그램이 작동할 떄 보이는 의존관계, 생성된 인스턴스와 그것을 참조하는 의존관계>> 프로그램이 실행될 때 인스턴스 간의 의존관계>> 프로그램 실행 중에 계속 변할 수 있음 생성자를 통해 런타임 의존관계를 주입하는 것을 생성자 의존관계 주입 또는 생성자 주입 클라이언트 클래스는 컴파일 타임에 추상적인 것에 의존, 런타임에 의존 관계 주입을 통해 구현체를 주입받아 사..

Java 2025.03.07

Java / 컬렉션 프레임워크 - LinkedList

노드와 연결노드는 내부에 데이터와 다음 노드에 대한 참조를 가지고 있음>> 각각의 노드가 참조를 통해 연결되어 있음 데이터를 추가할 떄 동적으로 필요한 만큼의 노드만 만들어서 연결하면 됨, 배열과 다르게 메모리 낭비 x>> next 필드를 통해 참조값을 보관해야 하기 때문에 추가적 메모리 낭비 발생 가능 첫 번째 위치에 데이터 추가연결 리스트는 배열처럼 실제 index가 존재하는 것이 아님>> 연결 리스트에서 index는 연결된 순서를 뜻함 배열의 경우 첫 번째 항목에 데이터가 추가되면 모든 데이터를 오른쪽으로 밀어야 하지만>> 연결 리스트는 새로 생성한 노드의 참조만 변경하면 됨 첫 번째 위치의 데이터 삭제 삭제 노드를 참조하는 곳이 없어지면 이후 GC의 대상이 되어 제거 배열의 경우 첫 번째 항목이 ..

Java 2025.03.04

Java / 컬렉션 프레임워크 - ArrayList

배열의 특징 - 배열과 인덱스배열에서 자료를 찾을 때 인덱스를 사용하면 빠르게 찾을 수 있음인덱스를 통한 입력, 변경, 조회의 경우 한번의 계산으로 자료의 위치를 찾을 수 있음 배열은 메모리상 순서대로 붙어서 존재int는 4byte 차지공식 : 배열의 시작 참조 + (자료의 크기 * 인덱스 위치)>> 배열에서 인덱스를 사용하면 데이터가 아무리 많아도 한 번의 연산으로 필요한 위치를 찾을 수 있음 배열의 검색 : 배열에 들어있는 데이터를 찾는 것>> 배열에 들어있는 데이터를 하나하나 비교해야 함, 크기가 클 수록 오랜 시간 빅오(O) 표기법알고리즘의 성능을 분석할 때 사용하는 수학적 표현 방식>> 특히 알고리즘이 처리해야할 데이터 양이 증가할 때 그 알고리즘이 얼마나 빠르게 실행되는지>> 알고리즘의 정확한..

Java 2025.03.04

Java / 제네릭(Generic) 2

타입 매개변수 제한>> 타입 매개변수 T를 Animal과 그 자식만 받을 수 있도록 제한을 두는 것>> T의 상한이 Animal이 되는 것, Animal이 제공하는 메서드들을 사용 가능 제네릭 메서드정의 : T genericMethod(T t)타입 인자 전달 : 메서드를 호출하는 시점 클래스 전체가 아니라 특정 메서드 단위로 제네릭을 도입할 때 사용메서드를 실제 호출하는 시점에 다이아몬드를 사용해서 타입을 정하고 호출 static 메서드에 제네릭을 동비하려면 제네릭 메서드를 사용해야 함 와일드카드컴퓨터 프로그래밍에서 *, ?와 같이 하나 이상의 문자들을 상징하는 특수 문자>> 여러 타입이 들어올 수 있다는 뜻 와일드카드는 제네릭 타입이나 제네릭 메서드를 선언하는 것이 아님>> 이미 만들어진 제네릭 타입..

Java 2025.03.04

Java / 제네릭(Generic) 1

타입 안전성 문제다형성을 활용한 덕분에 코드의 중복 제거, 기존 코드 재사용 가능 하지만 입력할 때 실수로 원하지 않는 타입이 들어갈 수 있음반환 시점에도 항상 위험한 다운 캐스팅 시도해야 함>> 타입 안전성 떨어짐 제네릭 적용(다이아몬드)를 사용한 클래스타입을 미리 결정하지 않음 생성하는 시점에 사이에 원하는 타입 지정 타입 추론자바 컴파일러가 타입을 추론할 수 있는 상황>> 읽을 수 있는 타입 정보가 주변에 있어야 추론 가능 용어 정리제네릭(Generic) 단어 : 일반적인, 범용적인이라는 영어 단어 뜻>> 특정 타입에 속한 것이 아님 제네릭 타입(Generic Type) : 클래스나 인터페이스를 정의할 때 타입 매개변수를 사용하는 것>> 제네릭 클래스, 제네릭 인터페이스를 모두 합쳐 제네릭 타입>..

Java 2025.03.02

Java / 예외 처리 - 실습

정상, 예외 흐름 분리자바의 예외 처리 메커니즘과 try, catch 구조로 정상 흐름은 try 블럭에 모아서 처리, 예외 흐름은 catch 블럭에 모아서 처리>> 정상 흐름과 예외 흐름을 명확하게 분리해 코드의 가독성 향상 finallytry를 시작하기만 하면 finally 코드 블럭은 어떤 경우라도 반드시 호출됨>> 주로 try에서 사용한 자원을 해제할 때 주로 사용 try, catch 안에 처리할 수 없는 예외가 발생해도 반드시 호출 >> 정상 흐름과 예외 흐름을 분리해서 코드의 가독성 향상>> 사용한 자원을 항상 반환할 수 있도록 보장 처리할 수 없는 예외상대 네트워크 서버에 문제가 발생해 통신이 불가능하거나 데이터베이스 서버에 문제가 발생해 접속이 불가하면>> 애플리케이션에서 연결 오류, 데이터..

Java 2025.03.02

Java / 예외 처리 - 이론

예외 계층 체크 예외는 발생한 에외를 개발자가 명시적으로 처리해야 함(안하면 컴파일 오류)언체크 예외는 발생한 예외를 명시적으로 처리하지 않아도 됨 상속 관계에서 부모 타입이 자식을 담을 수 있는 개념은 예외 처리에도 적용>> 상위 예외를 catch로 잡으면 하위 예외까지 함께 잡음 예외 기본 규칙예외는 잡아서 처리하거나 밖으로 던져야 함 예외를 잡거나 던질 때 지정한 예외뿐만 아니라 그 예외의 자식들도 함께 처리 가능>> Exception을 catch로 잡으면 하위 예외들도 모두 잡음>> Exception을 throws로 던지면 하위 예외들도 모두 던짐 체크 예외Exception을 상속받은 예외는 체크 예외 예외를 잡아서 처리하려면 try ~ catch(...)를 사용해서 잡으면 됨 try 코드 블럭에..

Java 2025.02.28

Java / 지역 클래스, 익명 클래스

지역 클래스(Local Class)내부 클래스의 특별한 종류의 하나>> 내부 클래스의 특징을 그대로 가짐 지역 변수와 같이 코드 블럭 안에서 정의 변수의 생명 주기클래스 변수 : 프로그램 종료 까지, 가장 길다(메서드 영역)>> 자바가 클래스 정보를 읽어 들이는 순간부터 프로그램 종료까지 존재 인스턴스 변수 : 인스턴스의 생존 기간(힙 영역)>> 본인이 소속된 인스턴스가 GC되기 전까지 존재, 생존 주기가 긴 편 지역 변수 : 메서드 호출이 끝나면 사라짐(스택 영역)>> 스택 영역의 스택 프레임 안에 존재, 생존 주기가 아주 짧음 지역 변수 캡처지역 변수의 생명주기는 짧고, 지역 클래스를 통해 생성한 인스턴스의 생명 주기는 긺지역 클래스를 통해 생성한 인스턴스가 지역 변수에 접근해야 하는데>> 생명 주기..

Java 2025.02.27

Java / 중첩 클래스, 내부 클래스

중첩 클래스의 분류중첩(Nested) : 어떤 다른 것이 내부에 위치하거나 포함되는 구조적인 관계내부(Inner) : 나의 내부에 있는 나를 구성하는 요소 정적 중첩 클래스>> 바깥 클래스 안에 있지만 바깥 클래스와 관계 없는 전혀 다른 클래스>> static이 붙음>> 바깥 클래스의 인스턴스에 소속되지 않음 내부 클래스>> 바깥 클래스의 내부에 있으면서 바깥 클래스를 구성하는 요소>> static이 붙지 않음>> 바깥 클래스의 인스턴스에 소속>> 생성할 때, 바깥 클래스의  인스턴스 참조 필요 중첩 클래스는 언제 사용?>> 특정 클래스가 다른 하나의 클래스 안에서만 사용되거나, 둘이 아주 긴밀하게 연결되어 있는 특별한 경우>> 외부의 여러 클래스가 특정 중첩 클래스를 사용하면 안됨 중첩 클래스 사용 이..

Java 2025.02.27