Java 32

static

static 변수나 메서드를 정의할 때 사용되며, 프로그램의 시작과 동시에 메모리에 로드되어, 모든 인스턴스가 공유할 수 있다.   static 변수모든 객체마다 존재하는 인스턴스 변수와 다르게 클래스 당 한 개만 존재한다.인스턴스 변수는 객체마다 개별적인 값을 갖지만 static 변수는 모든 객체가 동일한 값을 공유한다.클래스에 종속되어 있으며 객체의 생성과는 무관하게 클래스가 로드될 때 딱 한 번 메모리에 할당된다.동일한 데이터를 여러 인스턴스에 저장할 필요가 없기 때문에 메모리 사용의 중복을 줄일 수 있다.JVM의 클래스 영역(Method Area, Metaspace)에 저장된다.Static 변수는 클래스가 처음 로드될 때 한 번만 초기화되며, 프로그램 종료 시까지 유지되기 때문에 메모리 할당과 ..

Java 2025.01.07

ArrayList와 LinkedList

Array동일한 타입의 데이터들이 순차적으로 메모리에 저장되는 자료구조인덱스를 통한 직접 접근이 가능하여, 탐색 속도가 빠르지마, 크기가 고정되어 있고 동적으로 변경할 수 없다.변경이 필요한 경우 배열을 새로 생성한 후 기존의 요소들을 복사하여야 한다.ArrayList동적 배열 기반의 리스트 자료구조내부적으로 배열을 사용하여 요소를 저장하며, 요소의 추가나 삭제에 의해 크기를 동적으로 조정할 수 있다.ArrayList는 생성할 때 초기 용량을 설정할 수 있는데 기본값으로 10으로 설정된다.내부 배열의 용량이 초과되면 ArrayList는 자동으로 배열의 크기를 증가시킨는데, 이 과정에서 더 큰 새로운 배열을 생성하고, 기존 배열의 요소를 새로운 배열로 복사한다. (새로운 배열의 크기는 기존 배열 크기의 1..

Java 2025.01.07

상속과 다형성

객체 지향은 현실 세계를 모델링하여 데이터와 그 데이터를 처리하는 동작을 하나의 객체로 묶고, 이런 객체들 간의 상호작용을 통해 시스템을 설계하고 구현하는 프로그래밍 패러다임이다.  이러한 객체 지향의 특징에는 4가지가 있다.  1. 캡슐화2. 상속3. 다형성4. 추상화  그 중 상속과 다형성에 대해 알아보자. 상속상위 클래스의 기능을 하위클래스로 확장하거나 재사용하는 것이다.하위 클래스는 상위 클래스의 속성과 메서드를 확장하거나 변경하여 사용할 수 있고, 필요에 따라 상속받은 메서드나 속성을 확장하거나 재정의가 가능하다. 공통 기능은 부모 클래스에, 특수 기능은 자식 클래스에서 구현하여 코드의 중복을 줄일 수 있으며,공통 기능이 부모클래스에 집중되어 수정이 쉽다. 다형성하나의 이름으로 다양한 동작을 수..

Java 2025.01.07

람다와 함수형 프로그래밍의 원리와 활용

이펙티브 자바를 읽고 람다에 대해 다시 한 번 정리하고자 글을 적게 되었다.    람다를 들어가기 앞서 함수형 프로그래밍에 대해서 먼저 알아보자.함수형 프로그래밍은 순수함수를 기반으로 상태 변경과 부작용을 최소하하여 코드를 작성하는 프로그래밍 패러다임이다.이 패러다임은 데이터를 변형하는 대신 함수 조합을 통해 작업을 수행하며, 함수가 일급 객체로 취급된다. 즉, 함수를 다른 함수에 인자로 전달하거나 반환값으로 사용할 수 있고, 이를 통해 더 직관적이고 유지보수가 쉬운 코드를 작성할 수 있다.이와 같은 함수형 프로그래밍의 접근 방식을 자바와 같은 객체지향 언어에서 구현하기 위해 등장한 것이 바로 람다 표현식이다.   함수형 프로그래밍 특징1. 순수함수동일한 입력이 주어지면 항상 동일한 출력을 반환하는 함수..

Java 2025.01.07

람다 표현식과 함수형 인터페이스

람다 표현식은 자바의 메서드를 하나의 식으로 간결하게 표현한 것이다.이전에는 자바에서 메서드를 표현하려면 클래스를 정의해야 했지만, 자바 8 부터 람다식을 이용해 메서드의 이름과 반환 값을 생략할 수 있고, 이를 변수에 넣어 코드를 간결하게 한다. int add (int a, int b) { return a + b; }// 아래와 같이 변경할 수 있다.(a, b) -> a + b;   (매개변수) -> {함수 본문} 의 형태로,매개 변수가 없는 경우 () 를 사용하고, 매개 변수가 하나 인 경우 괄호를 생략할 수 있으며, 함수의 본문이 하나인 경우 중괄호와 return을 생략할 수 있다.// 매개변수가 없고, 표현식이 하나() -> System.out.println("hello"):// 매개 변수가..

Java 2025.01.07

@Transactional과 Proxy

@Transactional은 메서드 실행 전후에 트랜잭션을 시작하고 커밋 또는 롤백하는 기능을 제공하는 어노테이션으로, 스프링에서 트랜잭션 관리를 자동으로 처리한다.  @Transactional의 트랜잭션 동작1. 트랜잭션 시작:@Transactional이 적용된 메서드를 호출할 때, 먼저 PlatformTransactionManager를 사용하여 트랜잭션을 시작한다.트랜잭션 메니저는 트랜잭션 경계를 설정하고, 데이터베이스와의 연결을 트랜잭션 모드로 전환다.이를 통해 해당 메서드가 트랜잭션 내에서 실행되도록 한다.2. 트랜잭션 커밋:메서드가 정상적으로 완료되면 TransactionManager는 트랜잭션을 커밋한다.3. 트랜잭션 롤백:메서드 실행 중, Checked Exception 외의 예외(런타임 예..

Java 2025.01.07

Transaction

DBMS에서 데이터의 무결성을 보장하기 위한 개념으로, 하나 이상의 데이터베이스 연산을 묶어서, 하나의 작업 단위로 처리하는 것을 의미한다. 여러 연산이 모두 성공해야 커밋되어 데이터베이스에서 반영되고, 하나라도 실패할 경우 롤백하여 이전 상태로 되돌려 데이터의 일관성을 유지한다.   트랜잭션은 ACID 기반으로 동작하여 데이터베이스 시스템은 오류, 하드웨어 장애, 그리고 다른 트랜잭션과의 충돌 상황에서도 데이터의 정확성과 안정성을 보장한다.  트랜잭션의 특징 (ACID)Atomicity 원자성한 트랜잭션 내의 모든 연산들이 완전히 수행되거나, 전혀 수행되지 않아야 함을 의미한다. 트랜잭션이 부분적으로 실행되는 것을 방지하는 특성이다. ( All or Nothing )Consistency 일관성트랜잭션이..

Java 2025.01.07

index와 B-tree 그리고 Hash Index

데이터이 양이 많아지면 많아질수록 원하는 데이터를 찾는 시간이 오래 걸린다. 테이블의 처음부터 끝까지 검색하기 때문에 성능이 떨어지게 된다.이러한 대량의 데이터를 빠르고 효율적으로 조회하기 위해서 인덱스가 도입되었다.데이터가 저장된 위치에 대한 정보를 별도의 구조로 저장하여 필요한 데이터에 직접 찾아갈 수 있도록 도와준다. 책의 목차처럼 필요한 내용을 바로 찾아갈 수 있도록 해주기 때문에 검색 시간을 단축할 수 있다. Index데이터베이스 테이블에서 데이터를 빠르게 검색할 수 있도록 도와주는 데이터 구조주로 테이블 내의 특정 컬럼에 대해 인덱스를 생성하여, 해당 컬럼의 값을 정렬하고 물리적 데이터 위치를 함께 저장한다.이를 통해 전체 테이블을 스캔하지 않고, 인덱스를 통해 빠르게 원하는 값을 찾을 수 있..

Java 2025.01.07