언어 21

리플렉션 (Reflection)

자바에서는 크게 컴파일타임 -> 런타임 이런식으로 동작을 나눌 수 있다.이때 런타임에 클래스, 메서드, 필드 등의 정보를 동적으로 확인하고 조작할 수 있는 기능을 리플렉션 이라고 한다.주로 java.lang.reflect 패키지에 포함된 클래스와 인터페이스를 통해 제공된다.이를 활용하면 컴파일 시간에 알 수 없는 객체나 클래스의 구조를 런타임에 확인하고 조작할 수 있다. 리플렉션의 주요 기능1.클래스의 정보 탐색- 클래스 이름, 패키지 이름, 수퍼 클래스, 구현 인터페이스 등을 확인 가능.2.필드, 메서드, 생성자 접근- 클래스의 필드, 메서드, 생성자 정보를 가져오고 수정하거나 호출 가능. 3.객체 생성- 클래스의 생성자를 사용하여 객체를 동적으로 생성할 수 있음.4.접근제어 무시- private 접근..

언어/Java 2024.11.26

ConcurrentHashMap

Concurrent의 영어 뜻은 돌시발생의, 일치하는, 경쟁상대 등이 있다.즉 동시성을 지닌 해쉬맵이라고 보면 된다.여러 스레드에서 공유해도 안전성을 보장한다는 것이다. 멀티스레드 환경에서 동시성과 성능을 모두 고려하여 설계되었다. 특징1) 멀티스레드 안전 (Thread-Safe)ConcurrentHashMap은 멀티스레드 환경에서 동기화 문제 없이 안전하게 사용할 수 있습니다.내부적으로 동기화를 통해 데이터를 보호하며, 읽기/쓰기 작업을 효율적으로 처리합니다.2) 높은 성능synchronized를 사용하여 전체 맵을 잠그는 대신, 세분화된 잠금(Lock Striping)을 사용합니다.자바 8 이전에는 세그먼트(Segment)라는 구조로 나누어 락을 관리했으며, 자바 8부터는 CAS(Compare-And..

언어/Java 2024.11.23

Optional 옵셔널

Optional 클래스는 자바8부터 도입된 기능으로, 널 포인터 예외(NullPointerException)를 방지하고 더 명시적이고 안정적으로 널값을 다룰 수 있게 해준다. Optional은 널 값을 가질 수 있는 객체를 표현하는 컨테이너이다. 이는 널 값을 가질 수도 있고, 아닐 수도 있다는 것을 나타낸다.이를 사용하면 다음과 같은 3가지 구체적인 장점이 있다. 장점1.널 포인터 예외(NullPointerException)를 방지2.가독성 증가, 및 안정적인 API설계3.다양한 함수를 사용 가능 (filter, map 등) 주의점1.반환값으로 사용하고, 클래스필드에 Optional 사용 자제 (메모리 오버헤드 발생 가능성있음)2.값이 항상 존재할 경우 불필요하게 사용할 필요가 없음3.값을 꺼내는 Op..

언어/Java 2024.11.22

자바 컴파일 과정

자바의 컴파일 과정에 대해 개략적으로 살펴보면 다음과 같다. 1.개발자가 코드를 작성하여 .java 파일을 만듬2.자바컴파일러에 의해 .java파일이 .class파일(바이트코드)로 변환3.클래스 로더에 의해 jvm의 메모리에 .class파일과 각종 라이브러리 적재4.jvm이 올려진 파일 실행 (필요하면 네이티브메소드 호출)5.실행결과출력 이 과정을 자세히 살펴보자. 1. 소스 코드 작성개발자는 .java 확장자를 가진 Java 소스 코드를 작성예: HelloWorld.javapublic class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); }} 2. 자바 컴파일러..

언어/Java 2024.11.19

JAVA 자바 메모리 구조

자바 언어에서 사용되어지는 메모리구조를 정리1. Method Area (메소드 영역)역할:클래스와 메소드의 메타데이터(클래스 정보, 메소드 정보, 상수 풀 등)를 저장하는 영역모든 스레드가 공유드물게 클래스 언로드가 필요할 때, GC가 작동할 수 있음 (서버/동적 클래스 환경) 저장하는 것들:클래스 데이터 (메소드, 필드 정보)상수 풀 (Constant Pool)정적 변수 (Static Variables)메소드 코드 (Method Code) 2. Heap Area (힙 영역)역할:객체와 배열이 생성되고 저장되는 영역모든 스레드가 공유하며, JVM에서 Garbage Collector(GC)에 의해 관리 특징:Young Generation객체가 처음 생성되는 곳Young Generation은 Eden과 Su..

언어/Java 2024.11.18

알고리즘 문제풀이용 JAVA 문법 정리

1. 반복문과 조건문for-each 문: 배열 또는 컬렉션을 순회할 때 간편하게 사용할 수 있습니다. int[] arr = {1, 2, 3, 4}; for (int num : arr) {     System.out.println(num); } 3항 연산자: 조건문을 짧게 쓸 때 유용합니다. int min = (a 2. Arrays 클래스배열 관련 유용한 메서드들을 포함하고 있습니다.정렬: Arrays.sort(arr);이진 탐색: Arrays.binarySearch(arr, key); (정렬된 배열에서 사용)초기화: Arrays.fill(arr, value);3. Collections 클래스컬렉션과 관련된 다양한 메서드를 제공합니다.리스트 정렬: Collections.sort(list); (오름차순 정렬..

언어/Java 2024.11.13

래퍼 클래스 (Wrapper Class)

자바는 모든 요소가 객체로 취급되는 대표적인 객체지향 언어이다. 하지만 여기서 예외가 있는데 바로 기본자료형들이다. 정수형(primitive integer types): byte, short, int, long 부동 소수점형(primitive floating-point types): float, double 문자형(primitive character type): char 불리언형(primitive boolean type): boolean 위와 같은 요소들은 객체로 취급되지 않는다. 그렇기에 객체로 사용하기 위해서는 객체라는 포장지에 감싸줘야한다. 즉 래핑을 해줘야한다. 이런 역할을 해주는 것을 바로 래퍼 클래스 (Wrapper Class) 라고 한다. 다음은 래퍼클래스들의 목록이다. 이 친구들은 모두 객..

언어/Java 2024.04.18

깊은 복사 얕은 복사 파이썬

깊은 복사 (shallow copy) , 얕은 복사 (deep copy) 란? 완전히 원본과 분리된 복사본을 만들면 깊은 복사 복사본에 변경이 있을 때 원본도 영향을 받을 수 있으면 얕은 복사 리스트나 딕셔너리 같은 가변 객체의 얕은 복사는 원본객체를 참조하기에 복사본을 변경하면 원본객체도 변경된다. 대신 복사시간이 짧고 메모리에 효율적이다. 깊은복사는 시간도 오래걸리고 메모리도 더 많이 쓰는 대신에 완전히 독립적인 복사본을 제공한다. copy.deepcopy()를 사용 대표적인 얕은 복사의 예는 함수에 매개변수를 전달하는 예 이다. 예를 들어 리스트를 함수에 전달하고, 해당 함수에서 리스트의 요소를 변경하는 경우 원본 리스트에도 변경 결과가 반영된다. 이는 함수에 전달된 리스트가 원본 리스트의 참조를 ..

언어/Python 2024.04.10

Dictionary 파이썬

키(key,불변형: immutable)와 값(value,가변형:mutable)은 1:1로 하나만 대응 생성 및 초기화 검색 추가 dic.setdefault()는 해당 키가 있으면 대응되는 값을 반환하고 없다면, 해당 키를 생성한다.(밸류도 생성 가능) + 생성 할 때도 밸류 값 반환 다음과 같이 생성하면, 존재하지 않는 키 값에 접근 할때 해당 키를 생성해준다.(원래는 오류 남, int형 0으로 값 생성) 삭제 수정(해당 키 값과 밸류가 없으면 생성) 밸류 값을 리스트 형태로 해서 값 집어 넣기 딕셔너리 + 반복문

언어/Python 2024.03.28

람다식

람다(Lambda)식이란? 함수를 한 줄로 간단하게 표현하는 것이라고 할 수 있다. "굳이 이거 한줄 짜리 로직을 위해서 번거롭게 함수까지 만들어야 해?" 라는 느낌이다. 한 줄 정도의 간단한 로직을 위해 따로 함수를 만들어서 사용하는것이 비효율적일 수 있다. 또 자주 사용하지 않을 로직이다 싶으면, 이럴 때 사용 하는것이 람다식이다. 람다식의 기본 형태는 다음과 같다.(실행문 하나일 때 중괄호 생략가능(함수 몸체가 return문만 있으면 생략 불가), 매개변수 하나일 때 괄호 생략 가능 ) (매개변수) -> {함수의 실행문} 위의 함수를 람다식으로 변환하면 아래와 같다. 여기에서 매개변수의 타입 int 도 생략 가능하다. 이렇게 함수를 표현하여 변수처럼 취급하여 사용가능하며, 다른말로 익명함수 라고도 ..

언어/Java 2024.03.22