스터디/JAVA
-
불변 객체와 가비지 컬렉션의 관계스터디/JAVA 2024. 8. 22. 19:35
불변 객체는 여러 가지 장점을 가지고 있습니다. 특히 Thread Safe하여 병렬 프로그래밍에서 유용하며, 동기화를 고려하지 않아도 안전하다는 사실은 널리 알려져 있습니다. 하지만 불변 객체에 대해 공부하면서 두 가지 의문이 들었습니다. 불변 객체가 가비지 컬렉션(GC)의 성능을 높일 수 있다는 점이 잘 이해되지 않았습니다. 일반적으로 불변 객체는 한 번 생성된 후 수정이 불가능하기 때문에 GC와 어떤 관계가 있을지 궁금했습니다.불변 객체의 상태를 변경할 때마다 새로운 객체를 생성해야 한다는 점에서, 성능 저하에 대한 우려가 있었습니다. 객체를 자주 생성하는 것이 과연 효율적인지에 대해 의문이 들었습니다.의문을 해결하기 위해서 먼저, 가비지 컬렉션의 대상이 뭔지 알아야합니다. 가비지 컬렉션의 대상 가비..
-
ThreadLocalRandom을 왜 사용해야할까?스터디/JAVA 2023. 11. 1. 23:51
Random 클래스가 난수를 생성하는 방법Random 클래스는 시드를 기반으로 난수를 생성합니다. 즉, 동일한 시드를 사용하면 동일한 난수를 반환합니다.하지만 난수라는 개념 자체가 예측할 수 없는 값을 의미하므로, 동일한 시드에서 동일한 난수를 반환하는 것은 진정한 난수 생성과는 다소 거리가 있습니다. 이를 해결하기 위해, Random 클래스는 한 번 사용한 시드를 바탕으로 새로운 시드(newSeed)를 생성하여 다음 난수의 기반이 되도록 합니다.protected int next(int bits) { AtomicLong seed = this.seed; long oldseed; long nextseed; do { oldseed = seed.get(); next..
-
Comparable과 Comparator는 언제 써야할까?스터디/JAVA 2023. 6. 1. 11:24
Comparable과 Comparator는 모두 객체를 비교할 때 사용하는 인터페이스입니다.public interface Comparable { public int compareTo(T o);}public interface Comparator { int compare(T o1, T o2);} compareTo 메서드와 compare 메서드를 비교해보면 매개변수의 개수가 다릅니다. 이로부터 알 수 있는 사실은 Comparable의 compareTo 메서드의 비교의 대상이 자기 자신과 매개변수 o1이고, Comparator의 compare 메서드의 비교 대상은 매개변수 o1, o2 입니다.즉, 본질적으로 비교한다는 것 자체는 같지만 비교 대상이 다릅니다.Comparable 인터페이스Comparab..
-
불변 객체(Immnutable Object)란??스터디/JAVA 2023. 5. 27. 20:36
불변 객체란 뭘까?? 불변 객체란 생성 후 그 상태를 바꿀 수 없는 객체를 말한다. 따라서, multi - thread 환경에서 안전하다!! 그렇다면, 아래의 코드는 불변 객체일까?? 아닐까? public class Phone { private final String madeBy; private final Screen screen; private int useAge; public Phone(String madeBy, Screen screen, int useAge) { this.madeBy = madeBy; this.screen = screen; this.useAge = useAge; } private final String madeBy; private final Screen screen; private ..
-
String vs StringBuilder vs StringBuffer스터디/JAVA 2023. 5. 27. 13:51
안녕하세요! 이번 포스팅에서는 Java의 String 클래스에 대해 다뤄보도록 하겠습니다. String 클래스를 구글링을 하다보면, 가변 객체나 불변 객체라는 말을 심심치 않게 찾아 볼 수 있습니다. String 관련 클래스들을 정리하기 위해서는 알아야할 개념이니 간단하게 개념만 알아보도록 하겠습니다. 💡 불변 객체 : 생성 후 객체 내부의 상태 변경이 불가능한 객체이다. 가변 객체 : 생성 후 객체 내부의 상태 변경이 가능한 객체이다. 먼저, String 클래스에 관해 알아보도록 하겠습니다. String 클래스 String 클래스는 불변 객체입니다. String word = "This is "; System.out.println(word.hashCode()); word += "apple."; Syste..
-
정적 팩토리 메서드 언제 사용해야할까?스터디/JAVA 2023. 5. 23. 23:02
프로젝트를 진행하며 정적 팩터리 메서드를 자주 사용해 왔습니다. 아니, 어쩌면 항상 사용해 왔을지도 모릅니다.어느덧 이것이 하나의 관습처럼 자리 잡았는데, 과연 제가 사용하는 정적 팩터리 메서드가 올바른 방식인지 고민해 보려고 합니다. 정적 팩터리 메서드란?정적 팩터리 메서드는 클래스의 인스턴스를 반환하는 단순한 정적 메서드입니다.실제로, Boolean 클래스에서도 아래와 같이 사용되고 있습니다.public final class Boolean implements java.io.Serializable, Comparable, Constable{ public static final Boolean TRUE = new Boolean(tr..
-
enum에 대해서 알아보자 (java.lang.Enum 클래스 상속)스터디/JAVA 2023. 3. 1. 23:31
코드를 작성하다 보면 서로 관련이 있지만 독립적인 값들을 하나의 그룹으로 묶어 관리하고 싶을 때가 있습니다.이럴 때 유용하게 사용할 수 있는 것이 Java의 'enum'입니다. enum은 Enummeration의 약자로 "열거"라는 뜻을 갖는데, Java에서는 서로 관련 있는 상수들을 한 곳에서 관리할 수 있도록 도와주는 기능으로 enum을 제공하고 있습니다.이번 포스팅에서는 Java의 enum을 어떻게 활용하고 어떤 특징이 있는 지 알아보겠습니다. 언제 enum을 사용하면 좋을까? enum의 가장 큰 장점은 개발자가 해당 서비스에 필요한 문맥을 담을 수 있는 것이라고 생각합니다. 예를 들어, 에러 메시지와 에러 코드를 한 곳에서 관리하고 싶다고 가정해보면 아래와 같이 enum을 만들 수 있습니다.pub..
-
Atomic에 대해서 알아보자스터디/JAVA 2022. 12. 26. 10:11
Java를 공부하다가 Atomic(원자성) 개념을 알게 되었습니다. 중요한 개념이기에 정리하고 넘어가려고 합니다. Atomic이란?"Atomic"의 사전적 의미는 원자적 연산(Atomic Operation)입니다. 즉, 하나의 연산 단위로써, 다른 연산의 간섭 없이 단독으로 수행되는 연산을 의미합니다. Java에서는 AtomicInteger, AtomicLong 등과 같은 Atomic 관련 클래스를 제공하고 있습니다.그렇다면 Java에서는 왜 Atomic 클래스를 제공하는 걸까요?동시성 프로그래밍에서 발생할 수 있는 문제컴퓨터에는 CPU와 RAM이 있으며, CPU는 연산 속도를 높이기 위해 Cache Memory를 사용합니다. 즉, CPU가 데이터를 처리할 때 RAM뿐만 아니라, CPU Cache Me..