일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- NDK
- 알고리즘
- dart
- Rxjava2
- Django REST framework
- Kotlin
- Django REST Android
- C
- Python
- livedata
- flutter firestore
- UWP
- 안드로이드 구글맵
- RxAndroid
- Java
- FLUTTER
- 코틀린
- kodility
- Android P
- Django REST
- android push
- mfc
- Flutter TextField
- C/C++
- C++
- Android
- android architecture component
- 안드로이드
- RxJava
- Today
- Total
목록2018/09/04 (7)
개발하는 두더지
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 자바를 배울 수 있는 책은 무수히 많지만 이 책은 조슈아 블로크(Joshua Bloch)라는 썬 마이크로시스템즈, 구글에서 오랜 시간 자바를 확장하고 구현하고 사용한 프로그래머가 우아한 코드 구조를 설계하는 방법을 알려주는 책입니다.2판의 경우 78개의 규칙들을 서술하고 있으며 하나하나 규칙들을 포스팅할려고 합니다. [Effective Java 규칙1] 생성자 대신 정적 팩터리 메서드? [Effective Java 규칙2] 생성자 인자가 많을 때는 Builder 패턴을 이용[Effective Java 규칙3] private 생성자나 enum 자료형은 싱글턴 패턴으로 설계 [Effective Java 규..
[Effective Java 규칙7] 종료자 사용을 피해라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 책에 따르면 종료자는 예측 불가능하며, 대체로 위험하고, 일반적으로 불필요하다자바에서의 종료자는 C++ 소멸자와는 다르다C++에서 소멸자는 메모리 이외의 자원을 반환하는데도 사용되는데 자바에서는 보통 try finally 블록이 그런 용도로 쓴다자바에서 어떤 객체에 대한 모든 참조가 사라지고 나서 종료자가 실행되기까지는 긴 시간이 걸릴 수 있으므로 긴급한 작업을 종료자 안에서 처리하면 안된다예를들어, 종료자 안에서 파일을 닫는 행위는 치명적이다. 파일 디스크립터는 유한한 자원이기 때문이다JVM은 종료자를 천천히 실행하므로 열린 상태의 파일이 많이..
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. C/C++ 처럼 손수 메모리를 관리해야하는 언어와 달리 자바는 GC에 의해 자동으로 적절한 시기에 안쓰는 메모리를 해제한다하지만 자바도 메모리릭이 분명 발생하며 그 결과로 GC가 할일이 많아져 성능이 저하되고 메모리 요구량이 증가할 것이다극단적으로 디스크 페이징이 발생하고 OOM(Out Of Memory)가 출력되며 프로그램이 중단될 것이다public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_SIZE = 4; public Stack() { elements = new Obje..
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 기능적으로 동일한 객체는 필요할 때마다 만드는 것보다 재사용하는 것이 낫다.객체를 재사용하는 프로그램은 더 빠르고 우아하다 String s = new String("hello");객체를 생성할 때마다 새로운 객체가 만들어진다. s = "hello";이렇게하면 실행할 때마다 객체를 새로만드는 것이 아닌 동일한 객체를 사용한다. ( 아마 GC에 의해 사라지기 전까지 )같은 가상 머신에서 실행되는 모든 코드가 해당 객체를 재사용한다. 예를들어 아래와 같은 클래스가 있다1946년에서 1965사이에 태어났는지 확인하는 메서드이다public class Person { private final Date birthD..
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 싱글턴은 유일한 객체이므로 클래스를 싱글턴으로 만들 경우 테스트하기가 어렵다. 왜냐하면 가짜 구현으로 대체할 수 없기 때문에싱글턴을 구현하는 2가지 방법 1. private 생성자, public static 멤버변수 객체 생성2. private 생성자, public static 멤버변수 객체 생성, public 정적 팩터리 메서드 이용 싱글턴 클래스를 직렬화 가능 클래스로 만들려면 클래스 선언에 implements Serializable을 추가하면 되는데위 2가지 방법의 경우 추가하는 것만으로는 부족하다. 싱글턴 특성을 유지하려면 모든 필드를 transient (순간적인/일시적인?) 로 선언하고read..
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 생성자에 인자가 많을 때 적용할 대안에는 1. 점층적 생성자 패턴점층적으로 생성자를 쌓아가는 방식class Car { private int a; private int b; private int c; private int d; public Car(int a, int b) { this(a, b, 0); } public Car(int a, int b, int c) { this(a, b, c, 0); } public Car(int a, int b, int c, int d) { this.a = a; this.b = b; this.c = c; this.d = d; } } 2. 자바빈 패턴빈 생성자를 만들고 Set..
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 보통 객체를 만들 때 Car car = new Car(); 처럼 생성자를 이용하여 만든다.생성자 대신 정적 팩터리 메서드로 만든다면 장점은 무엇이 있을까? 1. 정적 팩터리 메서드에는 이름이 있다. 무슨말일까?..생성자와 파라미터만 가지고는 어떤 객체가 생성되는지 설명할 수 없지만 정적 팩터리 메서드는 이름을 잘 지어놓으면어떤 객체가 생성되는지 설명할 수 있다.Car car = Car.newInstance();Car car = Car.newInstanceWithWheel("금호"); 2. 호출할 때마다 새로운 객체를 만들지 않는다.싱글톤 클래스처럼 static 객체가 만들어지므로 동일한 객체가 요청되는..