종료자(finalizer)는 예측 불가능하며, 대체로 위험하고, 일반적으로 불필요한다. 종료자는 C++의 소멸자(destructor)와는 다르다는 것을 유념해야 한다. C++의 소멸자는 생성자와 쌍으로 움직이기 때문에 소멸 즉시 호출된다. 하지만 Java에서는 사용되지 않는 객체에 할당된 공간을 GC가 알아서 반환하므로 프로그래머 입장에서 특별히 할 일이 없다. 신경 쓰지 않아도 된다는 말은 다른 말로는 즉시 처리가 되지 않는다는 의미이기도 하다. 따라서 긴급한 작업을 종료자 안에서 처리하면 안 된다. Java에서는 try-finally를 이용하여 해제되어야 할 상황이라면 객체 종료를 보장하기 위해 반드시 그 즉시 직접 해제해야 한다. Java 1.7부터 try-with-resources 문을 지원하므로..
자바는 C/C++ 과는 다르게 더 이상 참조되지 않으면 객체들이 사용하던 메모리가 자동으로 회수된다. public Object pop(){ if(size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = null; // 쓸모없는 reference 를 제거 return results; } 불필요한 객체를 null로 만들면 메모리에서 바로 제거되며 나중에 실수로 그 참조를 사용하더라도 NullpointException이 바로 일어나도록 할 수 있다. 자체적으로 관리하는 메모리가 있는 클래스를 만들 때는 메모리 누수가 발생하지 않도록 주의해야 한다. (ex. element 가 free 되면 objec..
객체는 필요할 때마다 만드는 것보다 재사용할 수 있다면 재사용하는 편이 프로그램을 더 빠르게 한다. 특히 변경 불가능한 객체는 언제나 재사용할 수 있다. 단순객체 중복생성String str = new String("reference"); // "reference" 자체가 객체 String str = "reference";첫 번째 코드는 실행될 때마다 불필요한 객체를 만드는 한 예다. "reference"은 그 자체로 String 객체이다. 그런데 이를 다시 String 객체를 생성하고 있다. 이런 코드가 반복문 안에 있다면, 수많은 객체를 쓸데없이 만들고 지우게 된다. 따라서 두 번째 코드처럼 하는 것이 바람직하다. 이렇게 하면 실행할 때마다 같은 가상머신에서 실행되는 모든 코드가 해당 객체를 재사용하게..
코딩을 할 때 객체 생성을 막고 싶을 때가 있다.유틸리티 클래스(Utiliy class)들은 객체를 만들 목적의 클래스가 아니다. 객체를 만들면 오히려 이상하다. 하지만 생성자를 생략하면 컴파일러는 자동으로 디폴트 생성자(default constructor)를 만들어 버린다. 귀가 닳도록 듣고 입이 아프도록 많이 했던 말이다.. 이렇기 때문에 생성자를 만들지 않으려고 생성자를 선언하지 않았어도 사용자는 해당 클래스의 객체를 만들 수 있게 된다. 이런 경우 디폴트 생성자를 private로 정의해 놓고 객체를 생성하지 못하도록 막아야한다. /* 객체를 만들 수 없는 유틸리티 클래스 */public class UtilityClass {/* 기본 생성자가 자동으로 생성도지 못하도록 하여 객체 생성 방지 */pr..
Singleton싱글턴은 객체를 하나만 만들 수 있는 클래스다.싱글턴을 구현하는 흔히 사용하는 방법 두가지는 다음과 같다. 생성자를 private로 선언하고 public static final로 선언한 필드 변수에 인스턴스 저장생성자를 private로 선언하고 public statc ClassType getInstance() { return INSTANCE;} public class Elvis { private static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public static Elvis getInstance() { return INSTANCE; } public void leaveTheBuilding() { ... } }위 코드..
점층적 생성자 패턴(Telescoping Constructor Pattern)생성자 인자에 대해 생각해 본 적이 있는가? 때로는 생성자 인자가 너무 많을 때도 있다. 예를 들어 항목이 20개 쯤 되는 필드를 상상해 보자. 보통의 프로그래머들은 이런 상황에 점층적 생성자 패턴(telescoping constructor pattern)을 적용한다. 필수 인자만 받는 생성자를 하나 정의하고, 선택적 인자를 하나 받는, 둘 받는 인자를 계속해서 추가하는 식으로 생성자를 쌓아 올리듯 추가하는 것이다. 이런 조합 가능성을 다 고려한다면 생성자는 끊임없이 많아지게 된다. 또한, 설정할 필요가 없는 필드에도 인자를 전달해야 하는 경우가 생긴다. NutritionFacts cocaCola = new NutritionFa..
static factory method클래스를 통해 객체를 만드는 일반적인 방법은 public으로 선언된 생성자(constructor)를 이용하는 것이다. 그러나 모든 프로그래머가 반드시 알고 있어야 하는 방법이 하나 더 있다. 클래스에 public으로 선언된 정적 팩터리 메서드(static factory method)를 추가하는 것이다.정적 팩터리 메서드(static factory method)는 디자인 패턴 중 팩터리 메서드 개념(Factory Method)과 다르다는 점에 유의하자. public static Boolean valueOf(boolean b) {return b ? Boolean.TRUE : Boolean.FALSE;}위 코드는 실제 Boolean class의 method이다. 장점이름이..
- Linux 명령어
- 오라클 내장 함수
- 제주도 3박4일 일정
- spring
- Java
- SQL
- 자바스크립트
- 성능분석
- 프로그래머스
- effective java
- 정렬 알고리즘
- 회고
- 리액트 16
- sort algorithm
- React
- 오라클
- 이직
- 개발환경
- Eclipse
- 프로그래머
- 제주도 여행
- Tomcat
- javascript
- 자바
- 리액트
- 경력관리
- 리눅스 명령어
- Collection
- Maven
- 소프트웨어공학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |