일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- dart
- Python
- mfc
- 코틀린
- RxJava
- kodility
- 안드로이드
- 안드로이드 구글맵
- Rxjava2
- Android
- RxAndroid
- 알고리즘
- 프로그래머스
- C++
- Django REST
- android push
- FLUTTER
- android architecture component
- Android P
- UWP
- Java
- Kotlin
- NDK
- Flutter TextField
- livedata
- C
- C/C++
- Django REST framework
- flutter firestore
- Django REST Android
- Today
- Total
목록Java,Android (120)
개발하는 두더지
[Effective Java 규칙69] wait이나 notify 대신 병행성 유틸리티를 이용하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 자바 1.5부터 고수준 병행성 유틸리티 포함되어있어서 wait과 notify를 사용해서 구현해야될 일들을 대신하게 해준다. 제목처럼 wait과 notify를 정확하게 사용하는 것이 어렵기때문에 고수준 병행성 유틸리티를 반드시 사용해야 한다. java.util.concurrent에 포함된 고수준 병행성 유틸리티들은 실행자 프레임워크(executor framework), 병행 컬렉션(concurrent collection), 동기자(synchronizer) 이다. 이미 사용하고 있는 것일 수도 있지만 이번 규칙에..
[Effective Java 규칙68] 스레드보다는 실행자와 태스크를 이용하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 작업을 순차적으로 처리하는 작업 큐가 있다고 하자. 스레드 + 큐 조합으로 만든다면 스레드에 안전하지 않게 만들어질 가능성이 높다. 이를 해결하기 위해 자바 1.5부터 java.util.concurrent 패키지에 Executor Framework라는 유연성이 높은 인터페이스 기반 태스크 실행 프레임워크라는 것이 생겼다. ExecutorService executor = Executors.newSingleThreadExecutor(); 를 만들고 실행자에 Runnable을 넘겨 실행만하면 동기화가 끝난다. executor.exe..
[Effective Java 규칙67] 과도한 동기화는 피하라 Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 동기화를 너무 과도하게 적용하면 성능저하, 교착상태 문제가 생길 수 있다. 예를들어 옵저버 패턴에서 0~100인 값을 발행하고 전파한다고 생각해보자.동기화 블록안의 순환문에서 등록된 옵저버에 순차적으로 값을 등록하고 전파한다. 특정 인덱스에서 전파를 받는 콜백 인터페이스 함수에서 만약 옵저버를 삭제한다면 어떻게 될까? 리스트 순회가 이루어지는 상황에서 리스트에서 원소를 삭제하려하기 때문에 ConcurrentModificationException이 발생한다. executor service를 이용하여 다른 스레드에서 구독해제를 시도한다면 어떻게..
[Effective Java 규칙66] 변경 가능 공유 데이터에 대한 접근은 동기화하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 변경 가능한 데이터를 공유할 떄는 해당 데이터를 읽거나 쓰는 모든 스레드는 동기화를 해야 합니다. 동기화를 하지 않으면 스레드간 변경 사항이 적용될 거라고 보장할 수가 없기 때문입니다. 이런 오류들은 디버깅하기 까다롭고, 간헐적으로 발생하며, 타이밍에 민감합니다. 또한 어떤 VM이냐에 따라서 극도로 다르게 동작하기도 합니다. 메서드나 변수에 synchronized 키워드를 이용해 스레드간 동기화를 시켜서 data의 thread-safe를 시켜줍니다. 현재 data를 사용하고있는 스레드를 제외하고 나머지 스레드들은 da..
[Effective Java 규칙60] 표준 예외를 사용하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 프로그래밍 전문가는 코드 재사용을 위해 많은 노력을하고, 높은 수준으로 코드를 재사용 한다.; 코드를 재사용하면 좋다는 일반 규칙은 예외에도 어김없이 적용된다. 이미 있는 예외들을 재사용하면 좋은 점이 많다. 가장 중요한 장점은, 배우기 쉽고 사용하기 편리한 API를 만들 수 있다는 것이다. 왜냐하면 다른 프로그래머들도 친숙한, 널리 퍼진 관습을 따르기 떄문이다. 또 다른 장점은 그렇게 구현된 API는 가독성이 높다는 것이다. 아무래도 잘 모르는 예외가 뒤섞여있지 않기때문에 한 눈에 내용이 보인다. 마지막으로 예외 클래스 개수를 줄이면 프로그램..
[Effective Java 규칙54] 네이티브 메서드는 신중하게 사용하라 Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 자바 네이티브 인터페이스 ( JNI, Java Native Interface )는 C, C++ 등의 네이티브 프로그래밍 언어로 작성된 네이티브 메서드를 호출하는데 사용하는 기능이다. 네이티브 메서드에 계산하는 기능이 있다면 계산은 네이티브 언어로 실행되며 자바 언어로 전달되는 과정을 통한다. 전통적으로 네이티브 메서드는 3가지 용도로 사용되었다.1. 네이티브 메서드를 이용하면 레지스트리나 파일 락 같은 특정 플랫폼에 고유한 기능을 이용할 수 있었다.(자바 플랫폼이 발전하면서 특정 플랫폼에 고유한 기능들도 제공되어서 이젠 장점이 ..
[Effective Java 규칙53] 리플렉션 대신 인터페이스를 이용하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 리플렉션(reflection) 기능을 이용하면 메모리에 로드된 클래스의 생성자, 메서드, 필드 객체를 가져올 수 있다. 게다가 그 객체들을 이용하여실제 생성자, 메서드, 필드를 조작할 수도 있다. 클래스 브라우저, 객체 검사도구, 코드 분석 도구 등 리플렉션이 필요한 프로그램이 있지만 일반적으로 리플렉션이 필요한 케이스는 없으며사용하면 코드도 지저분해지고 소스 코드가 컴파일 될 당시에 존재하지 않은 클래스를 이용하게되어 오류가 발생할 수도 있다. 리플렉션을 아주 제한적으로만 사용한다면 오버헤드는 피하면서 리플렉션의 다양한 장점들을..
[Effective Java 규칙52] 객체를 참조할 때는 그 인터페이스를 사용하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 적당한 인터페이스 자료형이 있다면 파라미터, 리턴값, 변수, 필드 선언으로 구현체 클래스보다 인터페이스로 선언하는 것이 좋다.예를 들어서 아래처럼 사용해야 한다.List books = new ArrayList(); 아래 처럼 선언하는 것보다 더욱 유연해진다.ArrayList books = new ArrayList(); 마찬가지로 적절한 인터페이스가 없다면 추상클래스로 선언하는 것도 방법이다.