본문 바로가기
[Objective-C] Constant(상수) 정의하기 [Objective-C] Constant(상수) 정의하기 http://stackoverflow.com/questions/17228334/what-is-the-best-way-to-create-constants-in-objective-chttps://soulpark.wordpress.com/2012/08/02/objective_c_static_variable/ -Internal & Single class 용으로 상수를 정의한다면 static const 를 넣어준다. -Single class 에서 정의되지만 외부에서도 사용하는 public 개념의 상수를 만든다면extern 을 사용하면 된다. // headerextern NSString *const kConst; // implementationNSString.. 2017. 7. 23.
[Java Concurrency] 자바 메모리 모델 [Java Concurrency] 자바 메모리 모델 - 자바 메모리 모델(JMM, Java Memory Model) 의 내부 구조가 어떻게 동작하는지를 이해하고 있다면 상위 개념을 훨씬 효율적으로 쉽게 사용할 수 있을 것이다. 16.1. 자바 메모리 모델은 무엇이며, 왜 사용해야 하는가? - 특정 스레드에서 aVariable 이라는 변수에 값을 할당한다고 해보자. aVariable = 3; 자바 메모리 모델은 "스레드가 aVariable에 할당된 3이란 값을 사용할 수 있으려면 어떤 조건이 돼야 하는가?" 에 대한 답을 알고 있다. 동기화 기법을 사용하지 않는 상태라면 특정 스레드가 값이 할당되는 즉시, 심지어는 영원히 3이라는 값을 읽어가지 못하게 하는 여러 가지 상황이 발생할 수 있다. - JMM 은.. 2017. 5. 10.
[Java Concurrency] 중단 및 종료 #1 [Java Concurrency] 중단 및 종료 #1 - 작업이나 스레드를 안전하고 빠르고 안정적으로 멈추게 하는 것은 어려운 일이다. 더군다나 자바에는 스레드가 작업을 실행하고 있을 때 강제로 멈추도록 하는 방법이 없다. 대신 인터럽트(interrupt)라는 방법을 사용할 수 있게 되어 있는데, 인터럽트는 특정 스레드에게 작업을 멈춰달라고 요청하는 형태이다. 실제 상황에서 특정 스레드나 서비스를 "즉시" 멈춰야 할 경우는 거의 없고, 강제로 종료하면 공유되어 있는 여러 가지 상태가 비정상적인 상태에 놓일 수 있기 때문에 스레드 간의 협력을 통한 접근 방법이 올바르다. 다시 말해, 작업이나 서비스를 실행하는 부분의 코드를 작성할 때 멈춰달라는 요청을 받으면 진행 중이던 작업을 모두 정리한 다음 종료하도록.. 2017. 4. 25.
[Java Concurrency] 객체공유 [Java Concurrency] 객체공유 3.1. 가시성 - 일반적으로 특정 변수의 값을 가져갈 때 다른 스레드가 작성한 값을 가져갈 수 있다는 보장도 없고, 심지어는 값을 읽지 못 할 수도 있다. 메모리상의 공유된 변수를 여러 스레드에서 서로 사용할 수 있게 하려면 반드시 동기화 기능을 구현해야 한다. - 재배치(reordering) 현상을 조심해야 한다. 재배치 현상은 특정 메소드의 소스코드가 100% 코딩된 순서로 동작한다는 점을 보장할 수 없다는 점에 기인하는 문제이다. 단일 스레드로 동작할 때는 차이점을 전혀 알아챌 수 없지만 여러 스레드가 동시에 동작하는 경우에는 확연하게 나타날 수 있다. - 동기화 기능을 지정하지 않으면 컴파일러나 프로세서, JVM 등이 프로그램 코드가 실행되는 순서를 임.. 2017. 4. 17.
[Effective Java] 스레드 안전을 문서화 하자. [Effective Java] 스레드 안전을 문서화 하자. - 클래스 행동을 문서화하지 않으면, 프로그래머는 가정에 의존해서 그 클래스를 사용해야 한다. 만일 그런 가정들이 잘못되면, 그로 인한 프로그램은 불충분한 동기화나 과도한 동기화를 하게 될 것이다. 어떤 경우든, 심각한 에러가 유발될 수 있다. - 메소드 선언부의 synchronized 변경자는 메소드의 상세 구현 부분이지 외부로 제공되는 API 가 아니다. 즉 Javadoc 에 synchronized 가 공개되지 않는다. synchronized 변경자가 있다는 것이 스레드 안전을 문서화하기에 충분한 것은 아니다. 동시적 사용을 안전하게 하려면, 해당 클래스가 어떤 수준의 스레드 안전을 지원하는지 명확하게 문서화해야 한다. - 다음은 스레드 안전.. 2017. 3. 14.
[Effective Java] 공유하는 가변 데이터에 접근 시 동기화하자. [Effective Java] 공유하는 가변 데이터에 접근 시 동기화하자. - 동기화를 하지 않으면, 하나의 스레드에서 변경한 내용을 다른 스레드에서 못 볼 수 있다. 동기화는 불안정 상태의 객체를 스레드가 볼 수 없도록 하는 것은 물론, 동기화된 메소드나 블록에 진입하는 각 스레드가 앞에서의 모든 변경(같은 락으로 보호되었던)이 반영된 결과를 볼 수 있게 해준다. - 자바 언어 명세에서는 long 이나 double 타입이 아닌 변수의 값을 읽거나 쓸 때는 원자성을 보장한다. long 이나 double 타입이 아닌 변수의 값을 읽으면 어떤 스레드가 그 변수에 저장했던 값을 반환 받을 수 있다는 것. 실제로 동기화하지 않고 여러 스레드가 그 변수를 동시에 수정해도 그때그때 수정된 값이 반영된다. 스레드가 .. 2017. 3. 7.
[Effective Java] 보편화된 작명 규칙을 따르자. [Effective Java] 보편화된 작명 규칙을 따르자. - 패키지 이름은 짧게 하되, 일반적으로 9자 이내의 문자가 좋다. awt와 같이 복합 단어의 첫 자를 딴 두문자나, util 과 같은 약어를 사용해도 좋다. - 타입 매개변수의 이름은 통상적으로 단일 문자이며, 대부분 다음 다섯 개 중 하나이다. 임의 타입은 T, 컬렉션 요소 타입은 E, Map 의 키와 값은 K, V, 예외는 X 임의 타입의 순차는 T에 이어 U, V 또는 T1, T2, T3 등과 같이 하기도 한다. - boolean 이 아닌 속성을 반환하는 메소드의 이름은 명사, 명사구, 또는 동사인 get 으로 시작하는 동사구로 구성한다. size, hashCode, getTime 등이 그 예이다. 이런 return 값이 있는 메소드들은.. 2017. 2. 17.
[Effective Java] 오버로딩(overloading)을 분별력 있게 사용하자. [Effective Java] 오버로딩(overloading)을 분별력 있게 사용하자. public class CollectionClassifier{public static String classify(Set s){return "Set";} public static String classify(List lst){return "List";} public static String classify(Collection c){return "Unknown Collection";} public static void main(String[] args){Collection[] collections = { new HashSet(), new ArrayList(), new HashMap().values() };for( Col.. 2017. 1. 16.
[Django] 파이썬 웹 프로그래밍 - Django 웹 프레임워크 #2 [Django] 파이썬 웹 프로그래밍 - Django 웹 프레임워크 #1 -프로젝트란 개발 대상이 되는 전체 프로그램을 의미하며,프로젝트를 몇 개의 기능 그룹으로 나누었을 때, 프로젝트의 하위 서브 프로그램을 앱이라 말한다.즉 서브 프로그램인 앱을 개발하고, 이들을 모아 프로젝트 개발을 완성하게 되는 것이다. 이런 개념으로 프로젝트 디렉토리와 앱 디렉토리를 구분하고,코딩하는 파일도 프로젝트 파일인지 앱 파일인지 구분해서 적절한 위치에 저장해야 한다. -중요한 점은 하나의 앱이 여러 개의 프로젝트에 포함될 수 있기 때문에,앱을 한 번만 개발하고 이를 다른 프로젝트에 재사용하여 개발의 생산성을 높일 수 있다.앱 단위로 이들을 모아 프로젝트로 만들고,프로젝트를 모아서 더 .. 2016. 12. 12.
반응형