CS/Java 15

Hash

#️⃣ 해시해시 함수 (Hash Function)데이터의 효율적 관리를 목적으로 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수 해싱 (Hashing)key : 매핑 전 원래 데이터의 값value : 매핑 후 데이터의 값매핑하는 과정 전체를 '해싱'이라고 한다. 해시 충돌 (Collision)해시 함수는 해시값의 개수보다 대개 많은 키 값을 해시값으로 변환(many to one 대응)하기 때문에 해시함수가 서로 다른 두 개의 키에 동일한 해시값을 내는 해시충돌이 발생하게 된다. 그래서 충돌을 최소화할 수 있는 해시함수를 사용해야 한다. Hash가 쓰이는 곳hashMap 형태로 많은 언어들에서 사용된다. 주로 특정 데이터를 임시 공간에 저장하고 나중에 데이터의 키로 해당 데이터를 빠르게 찾..

CS/Java 2025.04.28

Collection Framework

📁 Java Collection Framework쉽게 말해서 자료 구조 종류의 형태들을 자바 클래스로 구현한 모음집이라고 보면 된다. 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓았기 때문에 자바 개발자는 그냥 인스턴스화만 하면 사용 가능하다. 👍🏻 장점인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 편리하고 재사용성이 높다.🗃️ 종류 크게 Collection 인터페이스와 Map 인터페이스로 나뉜다. Collection 인터페이스 List, Queue, Set에 상속을 하는 최상위 컬렉션 타입업캐스팅으로 다양한 종류의 컬렉션 자료형을 받아 자료를 삽입, 삭제, 탐색 기능을 할 수 있다. (다형성) List 인터페이스순서를 가..

CS/Java 2025.04.28

Reflection

🪞Reflection(반사)이란?객체를 통해 클래스의 정보를 분석하여 런타임에 클래스의 동작을 검사하거나 조작하는 프로그램 기법이다. 클래스 파일의 위치나 이름만 있다면 해당 클래스의 정보를 얻어내고, 객체를 생성하는 것 또한 가능하게 해주어 유연한 프로그래밍을 가능케 해준다. reflection은 프레임워크, 라이브러리에서 많이 사용된다. (ex. JPA, Jackson, Mockito, IntelliJ 자동완성 기능)왜냐하면 프레임워크, 라이브러리는 사용하는 사람이 어떤 클래스명과 멤버들을 구성할지 모르는데, 이러한 사용자 클래스들을 기존의 기능과 동적으로 연결시키기 위해 reflection을 사용한다고 보면 된다. 대표적인 예로는 스프링의 DI(Dependencty Injection), Pro..

CS/Java 2025.04.24

Generic

❔ Generic (제네릭) 이란? 자바에서 제네릭이란 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 말한다. 우리가 변수를 선언할 때 변수의 타입을 지정해주듯이, 제네릭은 객체에 타입을 지정해주는 것이라고 보면 된다. 예를 들어 리스트 자료형 같은 컬렉션 클래스나 메소드에서 사용할 내부 데이터 타입을 파라미터 주듯이 외부에서 지정하는 이른바 타입을 변수화 한 기능이라고 이해하면 된다. Generic 타입 기호 네이밍타입설명타입 (Type)요소 (Element), 예를 들어 List키 (Key), 예를 들어 Map리턴 값 또는 매핑된 값 (Variable)숫자 (Number)2번째, 3번째, 4번째에 선언된 타입제네릭 선언1. 클래스 및 인터페이스 선언public class ClassN..

CS/Java 2025.04.23

Java 8 특징

Java 8 Java 8에 추가된 내용lambdaoptional Lambda함수를 하나의 표현식으로 나타낸 것함수형 프로그래밍 언어에서 사용되는 개념으로 메서드에 이름이 없어 익명 함수라고도 불린다.괄호()와 화살표→를 이용해 함수를 선언한다. 람다식으로 선언된 변수명은 다른 변수명과 중복될 수 없다. 장점코드를 간결하게 만들 수 있다. 단점재사용이 불가능하다.디버깅이 어렵다. 재귀로 만들경우 부적합하다. 예시List list = Arrays.asList("banana", "apple", "cherry");// 기존Collections.sort(list, new Comparator() { @Override public int compare(String o1, String o2) { ..

CS/Java 2025.04.07

자바의 비동기 처리

동기 A라는 작업이 끝나는 동시에 B라는 작업을 시작한다.  비동기A가 작업을 끝내든 말든 상관없이 B가 자신의 작업을 시작한다. 작업들이 서로의 작업 시작 및 종료 시간에 영향을 받지 않고 별도의 작업 시작/종료 시간을 가진다. 모든 비동기 방식은 멀티 스레드에서 작동한다.  Thread를 사용하지 않은 코드멀티스레딩을 사용하지 않은 코드이다.  public class AsyncExample { public static void main(String[] args) { // 작업 1 - 1.5초 소요 System.out.println("작업1 시작"); try{ Thread.sleep(1500); } catch (Interrupt..

CS/Java 2025.04.07

Error & Exception

Throwable class예외와 관련된 최상위 클래스이다. 대부분 이 클래스를 직접 사용하기보다 이를 상속받은 Error나 Exception이 주로 사용된다. Throwable 클래스는 객체에 대한 오류나 예외에 대한 메시지를 담거나 예외 정보들을 기록한다. getMessage() : 발생한 예외에 대한 구체적인 메시지를 반환printStackTrace() : 예외에 대한 자세한 디버깅을 위해 주로 사용되는 메서드 오류(error)와 예외(exception)error : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류exception : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 Error는 메모리 부족(Out of Memory Error)이나 스택오버플로우(StackOverflowE..

CS/Java 2025.04.04

Boxing & UnBoxing

🔍 Wrapper Class프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 있다. 이럴 때 기본 타입을 객체로 다루기 위해 사용하는 클래스들을 래퍼 클래스(Wrapper Class)라고 한다.  자바의 모든 기본 타입은 값을 갖는 객체로 생성할 수 있다. 이런 객체를 포장 객체라고도 하는데 기본 타입의 값을 내부에 두고 포장하는 것처럼 보이기 때문이다. 포장된 물건은 바꿀 수 없듯이, 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경이 불가능하다. 만약 값을 바꾸고 싶다면 새로운 포장 객체를 생성해야 한다.  래퍼 클래스는 java.lang 패키지에 포함되어 제공된다. 래퍼 클래스를 이용하면 각 타입에 해당하는 데이터를 파라미터로 전달받아 해당 값을 가지는 객체로 만들어..

CS/Java 2025.03.28

Mutable & Immutable

🔍 Java에서 객체 생성 자바는 new 연산자를 통해 객체를 생성할 수 있고 이때 heap 영역에 할당되며 stack 영역에서 참조 타입 변수를 통해 데이터에 접근한다. 이 때 자바의 객체 타입은 2가지다. Mutable (가변) 객체와 Immutable (불변) 객체이다. 👉🏻 Summary 일단 둘의 차이에 대해 간단히 알아보자. MutableImmutable객체 생성 후 내부 값 변경 가능객체 생성 후 내부 값 변경 불가능값을 변경할 수 있는 메서드 O (setter 존재)값을 변경할 수 있는 메서드 X (setter 존재X)Thread safety 하지 않을 수 있음 (멀티스레드 환경에서 동기화 필요)Thread safety(스레드 안정성) 보장StringBuilder, StringBuff..

CS/Java 2025.03.26

Call by Value & Call by Reference

Java자바는 Call by Value 방식을 사용하며 Call by Reference 는 존재하지 않는다.  Call by Value함수의 인자를 전달할 때 값을 전달하는 방식전달받은 값을 복사하여 처리한다. 전달받은 값을 변경해도 원본은 변경되지 않는다. public class CallByValue { public static void main(String[] args) { int num1 = 10; int num2 = 20; System.out.println("Before Call Method : num1 = " + num1 + " , num2 = " + num2); method(num1, num2); System.out.print..

CS/Java 2025.03.24