최신 글
-
[Effective Java] 2장 객체 생성과 파괴 : item 7
아이템 7 - 다 쓴 객체 참조를 해제하라 객체를 사용한 후에는 명시적으로 참조를 해제하지 않으면 메모리 누수가 발생할 수 있다. 자바의 가비지 컬렉터는 사용되지 않는 객체를 자동으로 메모리에서 해제하지만, 여전히 참조가 남아 있는 객체는 해제되지 않는다. 다 쓴 객체 참조를 해제하지 않아 메모리 누수 발생public class Stack { private Object[] elements; private int size = 0; public Stack(int capacity) { elements = new Object[capacity]; } public void push(Object item) { elements[size++] = item; } ..
2024.10.31
-
[Effective Java] 2장 객체 생성과 파괴 : item 6
아이템 6 - 불필요한 객체 생성을 피하라 자바에서는 불필요한 객체 생성이 성능에 영향을 줄 수 있다. 특히, 값이 불변인 객체나 재사용 가능한 객체를 불필요하게 반복해서 생성하는 경우 메모리와 성능을 낭비할 수 있다. 따라서 객체를 재사용하거나 불변 객체를 활용해야한다. 불필요한 객체 생성// 잘못된 예시: 매번 새로운 String 객체를 생성String str = new String("Hello"); 위 코드는 "Hello" 가 이미 String 상수 풀에 존재하는데도 불구하고, new String()을 사용하여 불필요한 String 객체를 생성한다. String은 불변 객체이므로, 굳이 새로운 객체를 만들지 않아도 된다!! 해결// String 상수 풀에서 재사용String str = "Hello"..
2024.10.31
-
[Effective Java] 2장 객체 생성과 파괴 : item 4, 5
아이템 4 - 인스턴스화를 막으려거든 private 생성자를 사용하라 때로는 특정 클래스가 인스턴스화되지 않도록 완전히 차단해야 하는 경우가 있다. 모든 메서드가 정적인 경우 굳이 인스턴스를 생성할 필요가 없다. 이때 private 생성자를 사용하여 인스턴스화를 방지할 수 있다.public class UtilityClass { // private 생성자로 인스턴스화를 방지 private UtilityClass() { // 생성자를 호출하면 예외를 던져 인스턴스화를 명시적으로 막음 throw new AssertionError("Cannot instantiate UtilityClass"); }} 장점명시적으로 인스턴스화를 막음 실수로 해당 클래스를 인스턴스화하는 것을..
2024.10.22
-
[Effective Java] 2장 객체 생성과 파괴 : item 2, 3
아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라생성자나 정적 팩토리 메서드는 객체를 효율적으로 생성할 수 있는 방법이지만, 매개변수가 많은 경우에는 코드가 복잡해지고 가독성이 떨어질 수 있다. 빌더 패턴은 이러한 문제를 해결하는 방식으로, 특히 매개변수가 많은 객체를 만들 때 유용하다. 장점가독성 향상빌더 패턴을 사용하면 매개변수가 많은 객체를 생성할 때 매개변수의 의미를 명확하게 표현할 수 있다. 또한, 메서드 체이닝을 통해 각 매개변수를 명확하게 설정할 수 있다.NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8) .calories(100) .sodium(35) .carbohydrate(27) .build();위 코..
2024.09.28
-
[Effective Java] 2장 객체 생성과 파괴 : item 1
아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 일반적인 방법클래스를 사용하려면 "public 생성자"라는 도구를 써서 그 클래스의 실제 물건(인스턴스)을 만든다생성자 : 클래스에서 인스턴스를 만드는 특별한 방법 클래스 : 설계도 인스턴스 : 설계도를 통해 실제로 만든 것정적 메소드public 생성자를 사용하는 방법 외 인스턴스를 만드는 방법→ 클래스가 인스턴스를 만드는 방법으로 꼭 생성자를 사용할 필요는 없다. 정적 팩토리 메소드라는 특별한 방법을 사용할 수 있다.정적 : 고정되어 있다는 뜻. 클래스를 따로 만들지 않아도 바로 사용 가능하다. 팩토리 : 새로운 인스턴스를 만드는 방법흔히 사용하는 public static 이 바로 정적 팩토리 메소드이다!!public class Car { ..
2024.09.16