일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- IT
- CS
- 운영체제
- github
- 프로그래밍
- 신입사원
- 우리카드
- OS
- 세마포어
- 뮤텍스
- spring
- Public
- package-private
- 개발
- java
- 신입
- 깃허브
- 이펙티브 자바
- 정보처리기사
- 스프링
- 공채
- 디지털
- 컴퓨터공학
- 자바
- 스터디
- Effective Java
- 깃
- 컴퓨터과학
- 알고리즘
- 메모리
- Today
- Total
목록전체 글 (116)
주니어 개발자 성장기
메모리 누수 발생을 주의하자메모리 관리를 직접하는 경우 GC가 완벽하게 동작할 것을 기대하면 안된다 코드 내부에 더 이상 쓰이지 않지만 참조해제가 안된 객체들이 계속해서 존재할 가능성이 있다. 주요 원인 Stack Cache Listener 공통점: 모두 내부에 객체를 쌓아두는 공간이 있다! 일반적으로 자기 메모리를 직접 관리하는 클래스라면 프로그래머는 항시 메모리 누수에 주의해야 한다. - 이펙티브 자바 38p 대안 사용하지 않는 변수에 대해 명시적으로 null을 삽입해준다.public Object pop() { if (size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = null; //..
불필요한 객체 생성 String 타입의 인스턴스의 경우 한 번 생성되면 JVM 내부의 메모리에 캐싱되기 때문에 같은 JVM내에 있다면 모든 코드가 동일한 인스턴스를 참조한다. 하지만, new String("문자열")과 같은 생성자를 호출한다면 새로운 인스턴스가 생성된다. 반복문 내에 있으면 불필요한 객체가 수백만개 생성될 수 있으니 주의할 필요가 있다. String의 생성자는 heap 메모리에 저장, 그냥 선언된 String은 `Java Constant Pool`에 저장되어 사용된다. 생성 비용 절약 책에서는 생성 비용이 아주 비싼 객체들은 캐싱해서 재사용하기를 권장한다. 예를 들어서, String.matches 메서드의 경우 패턴을 입력 받으면 내부적으로 패턴을 컴파일해서 인스턴스를 만들게 되는데 생성..
개요 Comparable과 Comparator은 둘다 interface로서 Comparable은 자기 자신과 매개변수 객체를 비교하는 것이고 Comparator는 두 매개변수 객체를 비교하는 것이다. 공통점 둘 다 int 값을 반환한다. 반환 값이 양수인 경우, 앞의 객체(Comparable의 경우 this)가 순서상으로 뒤로 위치하게 된다. 0은 동등함을 의미하며 음수인 경우, 두 객체의 순서가 바뀌지 않는다. Comparator Comparator 는 자연스러운 순서가 없는 개체 컬렉션에 대한 순서를 제공하는 비교 기능으로서, 이 클래스의 구현체는 compare()를 override해야 한다. 앞서 말했듯 compare(Object A, Object B)와 같이 두 개의 인자를 받아서 int 값을 ..
의존 객체 주입(DI) 사용하는 자원에 따라 동작이 달라지는 클래스에 사용하기 적합하다. 문제 상황 자원을 직접 명시하게 되면 Mocking을 할 수가 없게된다. (엄밀히 말하면 가능은 하지만 번거롭고 바람직하지 않다.) //SpellChecker.class // 자원을 직접 명시하는 코드 private static final Dictionary dictionary = new DefaultDictionary(); 이미 자원이 클래스가 로드되는 시점에서 무조건 생성되며 변경할 수도 없다. 유연성과 재사용성이 떨어진다. 예제에 나온 SpellChecker가 DefaultDictionary가 아닌 KoreanDictionary나 EnglishDictionary를 사용하고 싶다면 어떻게 해야 할까? 기존처럼 리..
간혹 인스턴스화를 막는 것이 바람직한 유틸리티성 클래스들이 있다. public static 메서드를 가진 클래스들 로직을 도와주는 성격의 클래스 ex) org.springframework.util.StringUtils, java.lang.Math, java.util.Arrays, java.util.Collections와 같은 유틸리티 클래스가 있다. 유틸리티 클래스는 public static 메서드만 제공하기 때문에 인스턴스화가 필요하지 않으며, 인스턴스를 통한 메서드 호출은 오히려 인스턴스 메서드와 정적 메서드간의 혼동을 불러 일으킨다. 따라서, 인스턴스화를 방지하는 것이 바람직하다. 인스턴스화를 방지하기 위해서 abstract로 클래스를 만들 수 있다. 하지만 이 방법은 인스턴스화를 방지할 수 없다...
싱글톤을 사용하는 경우 크게 2가지 경우에 싱글톤을 사용하면 된다. 싱글톤을 사용하면 좋은 경우 DB 커넥션 등 인스턴스 생성 비용이 비싼 경우 반드시 사용해야 하는 경우 환경설정 등 애플리케이션 전반에 하나만 존재해야 하는 경우 Private 생성자 이펙티브 자바에서는 private 생성자를 기본으로 싱글톤을 구현하는 방법을 소개하고 있다. 그 중 첫 번째 방법인 public static final 멤버 변수를 사용하는 방법은 다음과 같다. public static final Elvis INSTANCE = new Elvis(); 즉, 필요 할 때마다 Elvis. INSTANCE를 직접 호출하면 된다. 문제점 테스트하기 어려운 구조 싱글톤 클래스를 사용하는 클라이언트 코드의 테스트가 어려워진다. 인터페이..