Java의 경우 GC가 메모리 관리를 해준다. 그래서 메모리 관리에 더 이상 신경을 쓰지 않아도 된다고 오해할 수 있으나 절대 사실이 아니다. // 일반적인 Stack 의 pop 메소드 public Object pop() { if (size == 0) { throw new EmptyStackException(); } return elements[--size]; } 특별한 문제는 없어 보일 수 있다. 하지만 '메모리 누수' 의 문제가 있는데 이 프로그램을 오래 실행하면 점차 GC 활동과 메모리 사용량이 늘어나 결국 성능이 저하될 것이다. 상대적으로 드문 경우긴 하지만 디스크 페이징이나 OutOfMemoryError를 일으킬 수 있다. 여기서 문제점은 다 쓴 참조(obsolete reference)를 여전히..
객체의 재사용 똑같은 기능의 객체를 매번 생성하기 보다는 객체 하나를 재사용하는 편이 나을때가 많다. 특히, 불변 객체는 언제든 재사용할 수 있다. String 의 객체 생성 String 객체를 생성하는 방법은 new 연산자와 리터럴을 사용하는 방법이 있다. String s1 = new String("kingsubin"); String s2 = new String("kingsubin"); // 이 방법은 매번 새로운 객체를 생성함. System.out.println(s1 == s2); // false String s3 = "kingsubin"; String s4 = "kingsubin"; // 이 방법은 String Constant Pool 이란 곳에서 재사용되어짐. System.out.println(s..
// 정적 유틸리티를 잘못 사용한 예 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } // 싱글톤을 잘못 사용한 예 public class SpellChecker { private final Lexicon dictionary = ...; private SpellChecker(...) {...} public static SpellChecker INSTANCE = new SpellChecker(.....
정적 필드와, 정적 메소드만 담은 유틸리티 클래스는 인스턴스로 만들어 사용하려고 설계한것이 아닌데 생성자를 명시해주지 않는다면 컴파일러가 자동으로 기본 생성자를 만들어준다. → 인스턴스화를 막고싶다면 private 생성자를 만들어준다. 추상 클래스로 만든다고 해도 상속받는 클래스를 생성한 후 인스턴스화 하면 되기에 추상 클래스로 만든다고해서 인스턴스화를 막는다고 할 수는 없다. 상속을 불가능하게 하는 효과도 있음 (모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출하는데 private 생성자라면 하위 클래스가 상위 클래스의 생성자에 접근할 수가 없음.) public class UtilityClass { // 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용) private Utility..
싱글톤(singleton) ? 인스턴스를 오직 하나만 생성할 수 있는 클래스 ex) 함수와 같은 무상태(stateless) 객체, 설계상 유일해야 하는 시스템 컴포넌트 장점 한번의 객체 생성으로 재사용이 가능하다. → 메모리 낭비를 방지할 수 있다. → 전역성을 갖기 때문에 다른 객체와 공유가 용이히다. 단점 클래스가 싱글톤이면 이를 사용하는 클라이언트를 테스트하기가 어려워 질 수 있다. → 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글톤이 아니라면 싱글톤 인스턴스를 mock 구현으로 대체할수 없기 때문. 싱글턴을 만드는 방식 1. public static final 필드 방식 생성자는 private 으로 감추기 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤..
정적팩토리나 생성자에는 똑같은 제약이 있다. → 둘 다 선택적 매개변수가 많을때 적절히 대응이 어렵다는 점 이렇게 선택적 매개변수가 많을때는 어떻게 효율적으로 사용할 수 있을까 ? 점층적 생성자 패턴 자바빈즈 패턴 빌더 패턴 점층적 생성자 패턴 (telescoping constructor pattern) 필수 매개변수만 받는 생성자 → 필수 매개변수, 선택 매개변수1 ... 필수 매개변수, 선택 매개변수 n ... 이렇게 전부 다 받는 생성자까지 늘려가는 방식 → 쓸 수는 있지만, 매개변수 개수가 많아지면 클라이언트 코드 작성이나 읽기가 어렵다. → 각 값의 의미가 헷갈림. → 타입이 같은 매개변수가 연달아 있으면 찾기 어려움. → 결국 런타임에 엉뚱한 동작 발생. 자바빈즈 패턴 (JavaBeans pa..
일반적으로 클라이언트가 클래스의 인스턴스를 얻기 위한 수단은 public 생성자이다. 이 생성자와 별도로 팩토리 메소드를 통하여 인스턴스를 얻을 수 있다. 팩토리 메소드? 클래스의 인스턴스를 반환하는 단순한 정적 메서드 → 책에서 장점 5가지와 단점 2가지를 소개한다. 장점 1. 이름을 가질 수 있다. 생성자 사용시에는 매개변수와 생성자 자체만으로는 반환되는 객체를 설명하기 힘들다. 반면에 정적 팩토리메소드는 이름을 통하여 객체에 대한 설명이 가능하다. public class Bottle { private String brand; private String name; private int price; public Bottle(String brand) { this.brand = brand; } static..
읽어봤는데 조금 어렵다. 그래도 일단 읽긴 읽어볼건데 한 번 읽는거로는 이해가 안된다. 다 이해는 못할 거 같은데 50%라도 가져가면 만족하는걸루 .. 찾다보니 책 스터디가 있어서 다른 사람들이 정리한 글도 같이본다. -> 정리가 잘 되어있어서 보기 좋음 https://github.com/Java-Bom/ReadingRecord https://github.com/Meet-Coder-Study/book-effective-java 나도 읽으면서 간단하게 정리해야겠다.
- Total
- Today
- Yesterday
- js array
- 백준
- java
- JPA 연관관계 매핑
- JS 딥다이브
- REST API
- 프로그래머스 SQL
- 이펙티브자바 아이템59
- 이펙티브자바 스터디
- js api
- 프로그래머스
- 모던자바스크립트
- http
- HTTP 완벽 가이드
- 드림코딩
- ㅇㄷㅇㅈ
- 패스트캠퍼스 컴퓨터공학 완주반
- 김영한 http
- Spring Security
- 이펙티브자바
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 백기선 스터디
- HTTP 완벽가이드
- 김영한 JPA
- GCP
- BOJ
- 이펙티브자바 아이템60
- 킹수빈닷컴
- js promise
- dreamcoding
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |