본문 바로가기
[실용주의 프로그래머] 계약에 의한 설계 [실용주의 프로그래머] 계약에 의한 설계 실용주의 편집증 -완벽한 소프트웨어는 만들 수 없다. -우리는 방어적으로 코딩하도록 가르침 받았다. 만약 조금이라도 의심이 들면, 주어진 모든 정보를 확인한다. 잘못된 데이터를 찾아내기 위해 assertion 을 사용한다. 일관성을 확인하고 데이터 베이스 컬럼에 constraint 를 걸면서 대부분은 스스로 만족해한다. 하지만 실용주의 프로그래머들은 여기서 한 걸음 더 나아간다. ‘그들은 자기 자신 역시 믿지 않는다’ 어느 누구 심지어는 자기 자신도 완벽한 코드를 작성할 수 없음을 알기 때문에 실용주의 프로그래머는 자신의 실수에 대비해 방어적으로 코드를 짠다. 계약에 의한 설계 -정직한 거래를 보장하는 최선의 해법 중 하나는 계약이다.계약은 상대편은 물론 자신의 .. 2018. 10. 24.
[android 보안] 안드로이드 보안 모델 #1 [android 보안] 안드로이드 보안 모델 출처 : Android Security Internals 1장개요 목차 1. 안드로이드 보안 모델 1.1. 안드로이드의 아키텍처 1.1.1. 리눅스 커널 1.1.2. 네이티브 사용자 공간 1.1.3. 달빅 가상 머신 1.1.4. 자바 런타임 라이브러리 1.1.5. 시스템 서비스 1.1.6. 프로세스 간 통신 1.1.7. 바인더 1.1.8. 안드로이드 프레임워크 라이브러리 1.1.9. 앱 1.2. 안드로이드 보안 모델 1.2.1. 앱 샌드박스 1.2.2. 권한 1.2.3. IPC 1.2.4. 코드 서명과 플랫폼 키 1.2.5. 다중 사용자 지원 1.2.6. SELinux 1.2.7. 시스템 업데이트 1.2.8. 검증된 부트 1.3. 요약 1.1. 안드로이드의 아.. 2018. 4. 14.
[Effective Objective-C] #51 initialize 와 load 메서드는 간결하게 만들라 [Effective Objective-C] #51 initialize 와 load 메서드는 간결하게 만들라 출처 : Effective Objective-C -오브젝티브-C 에서 최상위 클래스인 NSObject 를 상속한 대다수 클래스에는 초기화를 할 수 있는 몇 가지 메서드가 있다.이 메서드들 중 첫 번째는 load 이고 프로토타입은 다음과 같다.+ (void)load -클래스와 카테고리가 런타임에 추가될 때 이 메서드가 딱 한 번 호출된다.이는 클래스 또는 카테고리를 포함하는 라이브러리가 로드될 때, 즉 일반적으로 앱이 처음 실행(launch)될 때 일어난다.하지만 iOS 용 앱일 때만 해당된다.맥 OS X 앱은 동적 로딩(dynamic loading)같은 기능을 자유롭게 쓸 수 있다.그렇기 때문에 앱.. 2017. 10. 19.
[Effective Objective-C] #35 좀비를 이용해 메모리 관리 오류를 디버깅하라 [Effective Objective-C] #35 좀비를 이용해 메모리 관리 오류를 디버깅하라 출처 : Effective Objective-C -메모리 관리 오류를 디버깅하는 것은 매우 어려운 일이다.할당 해제된 객체에 메시지를 보내는 일은 예상할 수 있듯이 전혀 안전하지 못하다.그러나 때때로 그것은 동작하기도 하고 동작하지 않기도 하는데 이는 객체가 사용했던 메모리를 덮어 썼느냐에 달려있다.메모리가 재사용되었는지 알 수 있는 방법은 없다.그로 인해 크래시가 가끔 일어난다.메모리의 일부분만 재사용되는 경우도 있는데 이 때 객체의 일부분은 여전히 유효하다.또한 순전히 운으로 또 다른 유효한 살아 있는 객체가 메모리를 덮어쓸 수도 있다.이 경우 런타임은 새로운 객체에 메시지를 보낼 것이고 객체는 응답을 할 .. 2017. 9. 29.
[Effective Objective-C] #32 안전한 예외 처리 코드를 작성하려면 메모리 관리를 주의 깊게 다루라 [Effective Objective-C] #32 안전한 예외 처리 코드를 작성하려면 메모리 관리를 주의 깊게 다루라 출처 : Effective Objective-C -예외는 많은 최신 언어에서 제공되는 기능이다.C 에는 예외라는 개념이 없지만 C++ 과 오브젝티브-C 에는 있다.사실 최신 런타임에서는 C++ 과 오브젝티브-C 예외가 서로 호환된다.이는 한 언어에서 발생한 예외를 다른 언어에서 catch 해서 처리할 수 있다는 것을 말한다. -오브젝티브-C 는 심각한 에러 처리에만 예외를 사용하도록 권장하긴 하지만 그래도 예외를 잡아 처리하는 코드가 필요할 수 있다.예를 들어 예외가 발생하는 것에 대해 아무런 통제를 할 수 없는 오브젝티브-C++ 코드나 서드 파티 라이브러리를 사용하는 코드에서 예외 처리.. 2017. 9. 25.
[Effective Objective-C] #31 참조를 릴리스하고 관찰 상태(observation state)를 정리하는 일은 dealloc 메서드에서만 하라 [Effective Objective-C] #31 참조를 릴리스하고 관찰 상태(observation state)를 정리하는 일은 dealloc 메서드에서만 하라 출처 : Effective Objective-C -생애 주기가 끝난 객체는 할당 해제되고 dealloc 메서드가 호출될 것이다.이 메서드는 객체의 생애 주기 동안 리테인 수가 0으로 떨어질 때 딱 한 번 호출된다.호출되는 시점은 보장되지 않는다. 그렇지만 리테인과 릴리스가 있는 코드를 살펴보고 언제 호출될지 예상할 수 있다고 생각할 수도 있다.그러나 실제로는 여러분이 모르는 사이에 어떠한 라이브러리라도 객체를 조작할 수 있다.이는 예정되지 않는 시점에 할당 해제가 일어나게 하는 원인이 될 수 있다. -절대로 dealloc 을 직접 호출하면 안 된.. 2017. 9. 24.
[Effective Objective-C] #30 ARC 를 사용하여 reference count 를 쉽게 만들라 [Effective Objective-C] #30 ARC 를 사용하여 reference count 를 쉽게 만들라 출처 : Effective Objective-C -Clang 컴파일러 프로젝트(맥 OS X 와 iOS 개발에 사용되는 컴파일러 프로젝트)는 문제가 있는 참조 세기의 위치를 가리킬 수 있게 정적 분석기를 도입했다.이 정적 분석기를 통해 메모리 누수가 있다고 알려줄 수 있다.어디에 메모리 관리 문제가 있는지도 알려줄 수 있다.이것이 ARC 가 만들어진 배경이다. -ARC 는 이름이 말하는 그대로의 일을 한다.즉 reference counting 을 자동으로 한다.그래서 이전 코드 조각에서는 release 등을 써 주던 것을 이제는 하지 않아도 ARC 가 알아서 추가해준다. -ARC 를 사용할 때.. 2017. 9. 23.
[Effective Objective-C] #25 서드 파티 클래스에는 반드시 카테고리 이름을 접두어로 붙여라 [Effective Objective-C] #25 서드 파티 클래스에는 반드시 카테고리 이름을 접두어로 붙여라 출처 : Effective Objective-C -카테고리는 소스코드가 없는 클래스에 기능을 추가하기 위해 흔히 사용된다.이 기능은 매우 막강하지만 또한 이 기능을 사용함으로써 생기는 문제를 간과하기 쉽다.그 문제는 바로 카테고리의 메서드가 마치 클래스에 원래 있었던 것처럼 클래스의 일부분이 되는 사실 때문에 발생한다.이는 카테고리가 로딩될 때 실행 시간에 일어난다.런타임은 카테고리가 구현한 메서드들을 살펴보고 나서 메서드들을 클래스의 메서드 리스트에 추가한다.추가하는 카테고리의 메서드가 이미 클래스에 있다면, 추가되는 카테고리 메서드가 기존 메서드를 덮어 쓴다.이런 식의 덮어쓰기(overrid.. 2017. 9. 9.
[Effective Objective-C] #23 객체 간 통신에 델리게이트와 데이터 소스 프로토콜을 사용하라 [Effective Objective-C] #23 객체 간 통신에 델리게이트와 데이터 소스 프로토콜을 사용하라 출처 : Effective Objective-C -프로토콜은 자바의 인터페이스와 비슷한 기능이다.오브젝티브-C 는 다중 상속을 지원하지 않는다.그래서 프로토콜이 클래스가 구현해야 할 메서드 집합을 정의할 방법을 제공한다.프로토콜은 대부분 델리게이트 패턴을 구현하기 위해 사용한다. -프로토콜을 배워서 사용하면 코드에 사용 방법을 훌륭하게 문서화 할 수 있어 유지 보수하기 훨씬 쉬운 코드를 만들 수 있다. -카테고리 역시 오브젝티브-C 의 핵심 기능 중 하나다.카테고리는 상속을 사용해야 하는 다른 언어와는 달리 클래스를 상속받지 않고 메서드를 추가할 수 있게 하는 기능이다.이 기능은 오브젝티브-C .. 2017. 9. 3.
반응형