Java/기본 14

[Java] 객체지향 프로그래밍

객체지향(Object-Oriented Programming, OOP)프로그램을 객체(Obejcts)라는 독립적 단위들로 나누고,이 객체들이 서로 상호작용하며 전채 시스템을 구성하도록 설계하는 프로그래밍 패러다임이다. 객체지향의 핵심 개념객체 (Object)▶ 객체는 데이터(속성)와 기능(메서드)를 가진 프로그램의 독립적 단위이다.▶ 예를 들어, 자동차 라는 객체에는 색상, 모델명 같은 속성이 있고, 운전하다(), 정지하다() 와 같은 기능이 있을 수 있다.클래스 (Class)▶ 클래스는 객체를 생성하기 위한 설계도이다. 객체의 속성과 기능을 정의한다.▶ 예를 들어, 자동차 라는 클래스를 만들어두면, 이 클래스를 통해 다양한 자동차 객체(예: 빨간 자동차, 파란 자동차)를 생성할 수 있다.상속 (Inher..

Java/기본 2024.11.14

[Java] 참조란 무엇일까?

참조 (Reference) 는 프로그래밍에서 변수나 객체가 다른 객체나 값을 가리키는 방법을 의미한다.즉, 변수나 객체가 실제 데이터를 담고 있지 않고, 그 데이터가 저장된 위치(메모리 주소)를 가리키는 방식이다.참조를 이해하려면 값 자체와 그 값을 가리키는 주소의 차이를 이해하는 것이 중요하다. 1. 기본 데이터 타입과 참조값 타입 (Primitive Type)값 자체를 변수에 저장한다Int, double, char값이 그대로 저장되므로 다른 변수에 값을 할당할 때 값 복사가 이루어진다.int a = 10; // a 변수에 10 이라는 값을 저장int b = a; // b 변수에 a 라는 값을 복사 -> b 는 10  참조 타입 (Reference Type)실제 값을 저장한 메모리 위치(주소)를 저장한..

Java/기본 2024.11.14

[Java] 컴파일 오류? 런타임 오류?

컴파일 오류 (Compile-Time Error)시점: 코드를 작성하고 컴파일할 때 발생하는 오류발생 이유: 문법 오류나 잘못된 데이터 타입 사용 등 코드의 형식이나 문법이 맞지 않을 때 발생int number = "문자열"; // 정수형 변수에 문자열을 할당하려고 할 때컴파일러가 오류를 발견하고, 코드가 실행되지 않으며 수정이 필요하다런타임 오류 (Runtime Error)시점: 코드가 컴파일된 후, 프로그램이 실행중일 때 발생하는 오류발생 이유: 컴파일 과정에서는 문제가 없었지만, 실행 중에 예기치 못한 상황이 발생했을 때 나타난다. 예를 들어, 배열의 범위를 벗어난 인덱스에 접근하려 할 때, 또는 null 값을 찾모하려 할 때 발생한다.String text = null;System.out.print..

Java/기본 2024.11.14

[Java] 순환참조

순환참조객체나 클래스가 서로를 참조하는 상황이 계속 순환되는 구조를 말한다.예를 들어, 클래스 A 가 클래스 B 를 참조하고, 클래스 B 도 다시 클래스 A 를 참조하게 되면, 두 클래스가 서로를 필요로 하게 되어 순환 참조가 발생한다.예를 들어보면,1. 클래스 간 순환 참조class A { private B b; public A(B b) { this.b = b; }}class B { private A a; public B(A a) { this.a = a; }} 여기서 A 와 B 는 서로를 생성자에서 참조하므로, A 를 생성하려면 B 가 먼저 필요하고, B 를 생성하려면 A 가 필요하다. 이 때문에 객체를 생성하는 과정에서 무한 루프가 생기거나 ..

Java/기본 2024.11.14

[Java] @NoArgsConstructor, @AllArgsConstructor

Lombok 생성자 어노테이션 @NoArgsConstructor 과 @AllArgsConstructor@NoArgsConstructor@NoArgsConstructor 는 매개변수가 없는 기본 생성자(default constructor)를 생성한다. 필드를 초기화하지 않고 객체를 생성할 때 유용하다. 예를 들어, Spring과 같은 프레임워크에서 빈(Bean)으로 객체를 등록할 때 자주 사용된다.import lombok.NoArgsConstructor;@NoArgsConstructorpublic class Example { private String name; private int age;} 위 코드는 Example 클래스에 매개변수가 없는 기본 생성자를 추가한다. new Example() ..

Java/기본 2024.11.12

[Java] 트랜잭션

Java에서 트랜잭션(Transaction)은 데이터베이스 상태를 관리하기 위한 중요한 개념이다. 트랜잭션은 여러 작업을 하나의 논리적인 작업 단위로 묶어주며, 모든 작업이 성공해야지만 전체 작업이 커밋(commit)되고, 중간에 하나라도 실패하면 롤백하여 데이터의 일관성을 유지한다. 1. 트랜잭션의 ACID 속성원자성(Atomicity) : 트랜잭션 내 모든 작업이 하나의 단위로 실행되어야 하며, 일부만 성공하거나 실패해서는 안된다. 즉, 증간에 오류가 발생하면 트랜잭션 전체가 롤백된다.일관성(Consistency) : 트랜잭션이 완료되면 데이터베이스가 일관된 상태를 유지해야 한다.고립성(Isolation) : 트랜잭션 간 서로 독립적으로 실행되며, 트랜잭션이 완료되기 전까지 다른 트랜잭션이 중간 상태..

Java/기본 2024.11.11

[Java] CompletableFuture

CompletableFuture 는 Java 8 에서 도입된 클래스로, Future 의 한계를 보완하여 비동기 작업을 더 유연하게 관리할 수 있는 도구다.Future 는 비동기 작업 결과를 기다릴 수 있지만, 작업 완료 시 알림을 받거나 작업을 체인으로 연결하는 기능이 제한적이다.CompletableFuture 는 이러한 기능을 지원하며, 복잡한 비동기 로직을 간결하게 구현할 수 있다. CompletableFuture 의 주요 기능비동기 작업 체인:thenApply(), thenAccept(), thenRun() 등을 통해 비동기 작업이 완료되면 후속 작업을 수행할 수 있다. 이 덕분에 여러 작업을 체인으로 연결하는 비동기 흐름을 구현할 수 있다.예외 처리:exceptionally() 메서드를 사용해 비..

Java/기본 2024.11.08

[Java] Future

Future란 무엇인가?비동기 작업의 결과를 나중에 받을 수 있는 객체인 Future 는 Java의 java.util.concurrent 패키지에서 제공된다.작업이 완료될 때까지 기다리지 않고 다른 작업을 할 수 있으며, 완료되면 결과를 받을 수 있는 유연성을 제공한다. 사용 예시데이터베이스 조회, 원격 API 호출과 같은 시간이 오래 걸리는 작업을 비동기 처리할 때 유용하다 특징비동기 실행 : 작업이 백그라운드에서 실행된다결과 대기 : 완료될 때까지 기다리지 않고, 작업이 끝난 후 결과를 가져온다작업 상태 확인 : 작업이 완료되었는지, 취소되었는지 확인이 가능하다Future의 주요 메서드Future 는 여러 메서드를 통해 비동기 작업을 관리한다get() : 작업이 완료딜 때까지 기다렸다가 결과를 반환한..

Java/기본 2024.11.08

[Java] Java에서 final로 진짜_최종_최종_최종 불변 객체 만들기

이전 글에서 final을 앞에 달아주기만 하면 무적의 불변 객체가 되 .... .는줄 알았으나 ....불변 객체가 기본적으로 안전성을 높여주지만, 외부에서 참조하는 가변 객체를 포함하거나, 불변 객체의 일부 상태가 방어적 복사 없이 외부로 노출되는 경우 안전하지 않을 수 있다는 것. !! 그렇다면 불변 객체의 안전을 위협하는 상황에 대해서 알아보자1. 가변 객체를 포함할 때- 불변 객체 내부에 가변 객체가 포함되면, 해당 가변 객체의 상태가 외부에서 변경될 가능성이 생긴다. 예를 들어 Date 객체는 가변이므로, final 필드에 포함되더라도 객체 내부 상태가 바뀔 수 있다.public final class Period { private final Date startDate; private f..

Java/기본 2024.10.31

[Java] Java에서 final로 불변 객체 만들기

먼저 final을 이용해서 불변 객체를 만들기 전에 final의 개념과 Java에서 불변 객체가 어떤 의미인지 알아보자final은 자바에서 특정 값이나 상태를 변경하지 않도록 보장하는 키워드인데, 사용 위치에 따라 3가지로 분류할 수 있다. 1. 변수에 사용변수에 final을 붙이면 변수의 값을 한 번만 할당하도록 보장하는 역할을 한다.1-1. 기본 데이터 타입에 final 사용기본 데이터 타입(int, double, char 등)에 final을 붙이면, 값이 한 번 할당된 후에는 변경할 수 없다.public class Example { public static void main(String[] args) { final int number = 10; number = 20; ..

Java/기본 2024.10.30