본문 바로가기
[Java Concurrency] 스레드 안전성 [Java Concurrency] 스레드 안전성 - 스레드에 안전한 코드를 작성하는 것은 근본적으로는 상태, 특히 공유되고 변경할 수 있는 상태에 대한 접근을 관리하는 것이다. - 공유된 상태에 대한 접근을 동기화해야 한다는 원칙에 "특별한" 경우의 예외가 있다고 생각하고 싶겠지만, 그런 유혹은 버려야 한다. - 만약 여러 스레드가 변경할 수 있는 하나의 상태 변수를 적절한 동기화 없이 접근하면 그 프로그램은 잘못된 것이다. 이렇게 잘못된 프로그램을 고치는 데는 세 가지 방법이 있다. 1. 해당 상태 변수를 스레드 간에 공유하지 않거나 2. 해당 상태 변수를 변경할 수 없도록 만들거나 3. 해당 상태 변수에 접근할 땐 언제나 동기화를 사용한다. - 스레드 안전성을 확보하기 위해 나중에 클래스를 고치는 것.. 2017. 4. 14.
[android] ListView 에서 RecyclerView 로 migration 하세요. [android] ListView 에서 RecyclerView 로 migration 하세요. http://andraskindler.com/2014/11/22/migrating-to-recyclerview/ - Google 에서도 RecyclerView 을 Support library 에 넣으면서 ListView 를 대체하려는 움직임을 보이고 있다. RecyclerView 는 새롭고, 효율적이고, customize 하기에도 좋다. ListView 뿐만 아니라 GridView, StaggeredGridView, ExpandableListView 역시 모두 migration 가능하다. RecyclerView and LayoutManager RecyclerView 는 제한된 수의 window 를 이용하여 lar.. 2017. 4. 13.
[Django] Tutorial 목차 [Django] Tutorial 목차 Django 란? ( 장고 ) [Django] 파이썬 웹 프로그래밍 - 웹 프로그래밍의 이해 [Django] 파이썬 웹 프로그래밍 - 파이썬 웹 표준 라이브러리 [Django] 파이썬 웹 프로그래밍 - Django 웹 프레임워크 #1 [Django] 파이썬 웹 프로그래밍 - Django 웹 프레임워크 #2 [Django] 파이썬 웹 프로그래밍 - Django 의 핵심 기능 #1 [Django] 파이썬 웹 프로그래밍 - Django 의 핵심 기능 #2 2017. 4. 12.
[Android] Overview screen 을 꾸며보세요. [Android] Overview screen 을 꾸며보세요. http://www.bignerdranch.com/blog/polishing-your-Android-overview-screen-entry - Overview Screen( Home key long press 혹은 multi tasking button ) 을 Lollipop 부터는 꾸밀 수 있게 되었다.새로운 API 를 이용해 icon, title, top bar 색상 등을 수정할 수 있다. - 별다른 설정을 하지 않으면 android:icon, android:label, android:theme 을 통해 icon, title, top bar color 가 각각 정해진다. 이 값들은 base activity( launch, main ) 로부터.. 2017. 4. 11.
[Android] Material Design 개략적으로 알아보기~ Implementing Material Design in Your Android App http://android-developers.blogspot.kr/2014/10/implementing-material-design-in-your.html Material Design 은 Android 5.0 ( Lollipop, LOS ) 부터 등장한 안드로이드의 디자인이다. 전반적인 Animation 에 대한 가이드는 아래 링크를 참조하면 좋다.https://material.io/guidelines/motion/material-motion.html Tangible Surfaces * Shadow 아래와 같이 xml 에서 elevation 을 주면, z axis 로 이동한 효과를 내며, system 에서 dynam.. 2017. 4. 10.
[도서 목차 정리] Effective Java [Effective Java] 목차와 정리 링크 Chapter 1. 개요 개요 Chapter 2. 객체의 생성과 소멸 항목 1. 생성자 대신 static 팩토리(factory) 메소드 사용을 고려하자.항목 2. 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자.항목 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자.항목 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자.항목 5. 불필요한 객체의 생성을 피하자.항목 6. 쓸모 없는 객체 참조를 제거하자.항목 7. 파이널라이저(finalizer)의 사용을 피하자 Chapter 3. 모든 객체에 공통적인 메소드 항목 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자.항목 9. equa.. 2017. 3. 30.
[Effective Java] 직렬화된 인스턴스 대신 직렬화 프록시의 사용을 고려하자. [Effective Java] 직렬화된 인스턴스 대신 직렬화 프록시의 사용을 고려하자. - Serializable 인터페이스를 구현할 때는 결함과 보안 문제가 생길 가능성이 커진다. 정상적인 생성자 대신 언어 영역 밖의 메커니즘을 사용해서 인스턴스가 생성되기 때문이다. 그런 위험을 현저히 줄이는 방법이 직렬화 프록시 패턴(Serialization proxy pattern) 이다. - 직렬화 프록시 패턴은 직렬화 가능 클래스의 private static 중첩 클래스를 설계한다. 직렬화 프록시(serialization proxy) 라고 하는 inner 클래스는 외곽 클래스를 매개 변수 타입으로 하는 단일 생성자를 갖는다. 그리고 이 생성자는 자신의 인자로부터 데이터만 복사한다. 일관성 검사나 방어 복사도 할.. 2017. 3. 28.
[Effective Java] 인스턴스 제어에는 readResolve 메소드보다 enum 타입을 사용하자. [Effective Java] 인스턴스 제어에는 readResolve 메소드보다 enum 타입을 사용하자. - readResolve 메소드는 readObject 메소드에서 생성한 인스턴스를 다른 인스턴스로 바꾸어준다. 만일 역직렬화되는 객체의 클래스에서 readResolve 메소드를 올바르게 정의하면 그 객체가 역직렬화된 후 그 결과로 새롭게 생성된 객체에 대해 이 메소드가 자동 호출되며, 이 메소드에서 반환하는 객체 참조가 역직렬화로 새롭게 생성된 객체 대신 반환된다. - 싱글톤의 경우 다음과 같은 방법으로 싱글톤을 유지할 수 있다. private Object readResolve(){// Deserialization 으로 생성된 새로운 녀석은 GC 된다.return INSTANCE;} - readRe.. 2017. 3. 27.
[Effective Java] 방어 가능한 readObject 메소드를 작성하자 [Effective Java] 방어 가능한 readObject 메소드를 작성하자 - Serializable 하게 만들고 싶은 class 의 물리적 표현과 논리적 표현이 같다고 해도, 무조건 implements Serializable 을 붙이는 것이 능사가 아니다. readObject 는 바이트 스트림 인자 하나만 받는 생성자라고 볼 수 있는데 누군가가 고의적으로 이상한 바이트 스트림을 제공할 경우 문제가 될 수 있다. 따라서 readObject 메소드를 만들고, defaultReadObject() 를 수행 후, 역직렬화되는 객체의 유효성을 검사해야 한다. 만일 유효성 검사에 실패하면, readObject 메소드에서 InvalidObjectException 예외를 발생시켜야 한다. - 위의 방법으로 유효성.. 2017. 3. 24.
반응형