본문 바로가기

Java

(10)
추상화 예시 - 팩토리 메서드 활용 https://www.inflearn.com/course/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9E%85%EB%AC%B8/dashboard 객체 지향 프로그래밍 입문 강의 | 최범균 - 인프런최범균 | 잘 하는 개발자가 되기 위해서는 유연한 코드를 작성할 줄 알아야합니다. 객체 지향을 이용해서 변경하기 좋은 유연한 코드를 만드는 방법을 알아보세요., 좋은 코드, 좋은 설계를 하고www.inflearn.com https://www.inflearn.com/course/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard 코딩으로 학습하는 Go..
레이스 컨디션 (Race Condition) -01. @Transactional, synchronized 레이스 컨디션 이란? 레이스 컨디션은 멀티 스레드 환경에서 두개 이상의 스레드가 공유 자원에 동시에 접근하려고 경합하는 현상을 이야기 한다. 이러한 상황에서 스레드간의 실행 순서가 예측이 불가능해 지고, 그에 따라 프로그램의 실행 결과가 실행시마다 달라질 가능성이 생긴다. 즉 레이스 컨디션이 발생하면 데이터의 일관성과 정확성이 손상될 가능성이 생겨 버그로 이어질 수 있다. 다음은 레이스 컨디션을 일으킬 수 있는 코드 예제이다. public class Counter { private int count = 0; public void increment() { count++; // 이 부분에서 레이스 컨디션 발생 가능 } public int getCount() { return count; } public sta..
어노테이션(Annotaion) + Custom Annotation Spring 위에서 개발을 하다보면 특히나 어노테이션(Annotation)을 자주 사용하게 된다. 스프링에서는 스프링 코어 어노테이션인 @Bean, @Service, @Component 등 부터 웹 관련 어노테이션인 @RequestMapping, @PatrhVariable 그밖에 @Transactional, @Secured 등의 다양한 어노테이션을 제공해준다. 이러한 어노테이션들 덕분에 간결하고 직관적인 코드를 만들 수 있으며, 그로 인해 XML 기반의 설정을 사용할 때 보다 개발 편의성이 크게 향상되었다. 하지만 이런 편의성에 빠져서 무작정 사용하기만 한다는걸 깨닫고 이번 기회에 어노테이션에 대해서 글을 정리해 보기로 하였다. 어노테이션이란 JDK5부터 도입된 어노테이션은 코드에 대한 메타데이터를 제공..
리플렉션(Reflection) 리플렉션이란? Java의 리플렉션(Reflection) 기능은 런타임 시 클래스 정보에 접근하여, 그 클래스의 인스턴스를 생성하거나 메서드를 호출하는 등의 동작을 가능하게 해주는 기능을 제공한다. java.lang.reflect 패키지를 통해 사용할 수 있으며, 리플렉션을 사용해서 Java 코드 내에서 동적으로 객체의 속성에 접근하거나 수정할 수 있다. 뿐만아니라 클래스의 정보를 조회하거나 새로운 객체를 생성하는 작업들을 제공한다. 리플렉션은 힙 영역(Heap) 에 로드된 Class 타입의 객체를 통해 원하는 클래스의 정보에 접근한다. 힙 영역은 객체와 배열이 동적으로 할당되는 곳이다. Class 타입의 객체는 Java가 실행되고 JVM이 클래스를 로드하는 순간 생성되고 클래스에 대한 메타데이터를 포함하..
Singleton 싱글톤이란 자바에서 싱글톤(Singleton) 패턴은 객체 생성 관련 디자인 패턴 중 하나이다. 싱글톤 패턴은 클래스의 인스턴스가 애플리케이션 내에서 단 하나만 생성되도록 보장해주는 패턴이다. 이 패턴의 목적은 전역 상태를 관리하고 리소스에 대한 중복 접근을 방지하는데에 있다. 시스템 런타임, 환경 세팅 관련 정보와 같이 인스턴스가 여러개일 때 문제가 생길 수 있는 경우에서 이러한 클래스가 필요할 수 있다. 싱글톤의 특징 및 장점 단일 인스턴스 : 클래스의 인스턴스가 하나만 생성되고, 이 인스턴스에 대한 전역 접근을 제공할 수 있다. 스레드 안전(Thread Safety) : 인스턴스가 하나만 생성되도록 싱글톤을 구현할 수 있고, 이로 인하여 멀티스레드 환경에서 안전하게 만들 수 있다. 메모리 절약 : ..
불변 객체(Immutable Object) 불변 객체(Immutable Object)는 생성 후 그 상태를 변경할 수 없는 객체를 말한다. 불변 객체의 상태는 객체가 생성될 때 설정되며, 그 이후에는 변경될 수 없다. Java에서는 대표적으로 'String', 'BigInteger', 'BigDecimal' 등이 있다. 예를들어 'String'클래스의 객체는 한번 생성되면 그 값을 변경할 수 없으며, 문자열을 변경할 때마다 새로운 'String' 객체가 생성된다 불변 객체의 장점 스레드 안정성(Thread-Safety) : 불변객체는 스레드 안전성이 있어 병렬 프로그래밍에 유용하고 동기화를 고려하지 않아도 된다. 여러 스레드에 의해 동시에 사용되어도 상태가 변경되지 않기 때문이다. 멀티 스레드 환경에서 발생하는 주된 문제는 공유자원에 대해 서로 ..
Builder Pattern (빌더 패턴) 복잡한 객체를 단계별로 생성할 때 빌더 패턴을 고려할 수 있다. 특히 생성자에 여러 매개변수가 있는데 그 중 일부는 필수값이고 일부는 선택적인 경우 이 패턴이 유용할 수 있다. 빌더 패턴으로 코드 가독성을 높혀줄 수 있을 뿐만 아니라, 객체 생성 과정이 좀더 안전하고 직관적이게 되기 때문이다. 계층적 생성자 패턴 → 자바 빈즈 패턴 → 빌더 패턴 순서로 코드를 보면서 각각의 객체생성 방식을 살펴보자. 점층적 생성자 패턴 public class NutritionFacts { private final int servingSize; // (mL, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1..
BigInteger.valueOf와 정적 팩토리 메서드 코드에 BigInteger 객체를 이용하게 되었다. 오랜만에 사용하는 클래스는 한번씩 내부 코드를 보는 습관이 있는데 다양한 생성자들이 있었고 BigInteger bi1 = new BigInteger("12345678901234567890"); BigInteger bi4 = BigInteger.valueOf(123456789L); BigInteger bi8 = new BigInteger(128, new Random()); byte[] byteArray = {1, 2, 3, 4, 5}; BigInteger bi5 = new BigInteger(byteArray); 그러다 'BigInteger.valueOf' 메서드가 눈에 띄었다. import java.math.BigInteger; public class ..