Java 30

Java / 컬렉션 프레임워크 - Map, Stack, Queue

Map키-값의 쌍을 저장하는 자료 구조>> 키는 중복될 수 없지만 값은 중복 가능>> Map은 순서를 유지하지 않음 Entry Key-Value Pair>> Entry는 키-값의 쌍으로 이루어진 간단한 객체, Map 내부에서 키와 값을 함께 묶어서 저장할 때 사용 키 목록 조회Set keySet = studentMap.keySet()>> Map의 키는 중복 허용 x>> Map의 모든 키 목록을 조회하는 keySet() 호출하면 중복 허용하지 않는 자료 구조인 Set 반환 값 목록 조회Collection values = studentMap.values()>> Map의 값은 중복 허용, Set으로 반환 불가>> 입력 순서 보장 x, List로 반환하기 애매>> 단순히 값의 모음이라는 의미의 상위 인터페이스 ..

Java 2025.03.09

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

Set 인터페이스중복을 허용하지 않는 유일한 요소의 집합>> 순서를 보장하지 않으며 특정 요소가 집합에 있는지 여부를 확인하는데 최적화 HashSet구현 : 해시 자료 구조를 사용해서 요소 저장순서 : 특정 순서 없이 저장시간 복잡도 : O(1)용도 : 데이터의 유일성만 중요하고 순서가 중요하지 않은 경우hashCode(), equals() 모두 사용 LinkedHashSet구현 : HashSet에 연결 리스트를 추가해서 요소들의 순서 유지순서 : 요소돌은 추가된 순서대로 유지시간 복잡도 : O(1)용도 : 데이터의 유일성과 함께 삽입 순서를 유지해야 할 경우head(first)부터 순서대로 링크를 따라가면 입력 순서대로 데이터 순회 가능양방향 연결 TreeSet구현 : 이진 탐색 트리를 개선한 레드-블..

Java 2025.03.08

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

문자열 해시 코드컴퓨터는 문자를 직접 이해하지 못하는 대신 각 문자에 고유한 숫자를 할당해서 인식 (ASCII 코드)hashCode() 메서드를 사용해서 문자열을 해시 코드로 변경>> 고유한 정수 숫자 값 (해시 코드)를 사용해서 해시 인덱스를 생성하고 이걸 배열의 인덱스로 사용 자바의 hashCode()해시 자료 구조를 사용하려면 정수로 된 숫자 값인 해시 코드가 필요자바에는 정사 뿐만 아니라 char, String, Double, Boolean등 수 많은 타입 존재, 또한 개발자가 직접 정의한 Member, User와 같은 사용자 정의 타입도 존재>> 모든 객체가 숫자 해시 코드를 제공할 수 있어야 함 Object.hashCode()자바는 모든 객체가 자신만의 해시 코드를 표현할 수 있는 기능 제공보..

Java 2025.03.08

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