본문 바로가기
[Effective Java] 하위 계층의 예외 처리를 신중하게 하자. [Effective Java] 하위 계층의 예외 처리를 신중하게 하자. - 상위 계층에서 하위 계층의 예외를 반드시 catch 해야 한다. 그리고 그 예외대신에 상위 계층의 추상체가 알 수 있는 예외로 바꿔 던져야 한다. 이 이디엄을 예외 변환(exception translation)이라 한다. 그렇지 않으면 구현 내용을 공개하는 것처럼 되어 나중에 호환성 이슈를 겪게 된다. - 만약 예외 변환을 사용하면서 근본적인 이유까지 확실히 알고 싶다면 변화할 때 excpetion 을 담아서 전달할 수 있다. 예를 들어 throw new HigherLevelException( lowerLevelException ) - 예외 연쇄 - 하위 계층(저수준)에서 발생한 예외를 분별 없이 전파하는 것보다는 예외 변환을 사.. 2017. 2. 27.
[Effective Java] 표준 예외를 사용하자 [Effective Java] 표준 예외를 사용하자 - 기본 예외를 재사용하면 여러 가지 장점이 있다. 프로그래머들이 이미 익숙해진 내용과 일치하기 때문에 우리 API 를 배우고 사용하기 쉽게 해준다. 생소한 예외를 사용하지 않으므로 코드를 이해하기 쉽다. 메모리 사용도 적게하고 클래스를 메모리로 로딩하는 시간도 줄어든다. - 자주 재사용되는 형태의 exception 은 IllegalArgumentException, IllegalStateException, NullPointerException, UnSupportedOperationException 등이 있다. API, Effective JAVA, IllegalArgumentException, illegalstateexception, NullPointer.. 2017. 2. 24.
[Effective Java] 예외 상황에서만 예외를 사용하자. [Effective Java] 예외 상황에서만 예외를 사용하자. - 예외는 예외 상황을 대비해 설계된 것이므로, JVM 을 만드는 회사가 예외 처리 속도를 빠르게 하려고(우리가 명시적으로 검사하는 것만큼) 매달릴만한 일이 아니다. try-catch 블록 내부에 코드를 넣으면, 여러 종류의 JVM 이 해 줄 수 있는 나름의 최적화를 못하게 하는 부작용이 생길 수 있다. 배열을 반복 루프 처리하면서 정상적인 루프 종료 검사를 하는 표준 이디엄 코드가 반드시 중복 검사를 하는 것은 아니다. 근래의 JVM들에서는 그런 코드를 최적화한다. - 예외는 예외적인 상황에서만 사용해야 한다. 절대로 정상적인 흐름 제어에 사용하면 안된다. - 잘 설계된 API에서는 클라이언트가 예외를 사용해서 정상적인 흐름 제어를 하게끔.. 2017. 2. 20.
[Effective Java] 매개 변수가 유효한지 검사하기. [Effective Java] 매개 변수가 유효한지 검사하기. - 대부분의 메소드와 생성자는 자신들의 매개 변수로 전달될 수 있는 값에 제한을 둔다. 그런 모든 제약은 명확하게 문서화해야 하며, 메소드 몸체 코드의 맨 앞에서 검사하도록 해야 한다. 이것은 에러가 발생한 후 가능한 빨리 검출해야 한다는 일반적 원칙의 특별한 경우이다. 만일 사전 검사에 실패하면 에러의 검출이 불확실하게 되고, 에러가 생긴 소스 코드를 찾기가 더욱 어려워진다. - public 메소드의 경우는 javadoc 의 @throws 태그를 사용해서 매개 변수 값의 제약을 위반했을 때 발생되는 예외를 문서화한다. 일반적으로 IllegalArgumentException, IndexOutOfBoundsException, NullPointe.. 2017. 1. 9.
[Effective Java] Override 주석을 일관성 있게 사용하자. [Effective Java] Override 주석을 일관성 있게 사용하자. - 슈퍼 클래스의 메소드를 오버라이드 한다고 생각되는 모든 메소드에 Override 주석을 사용해야 한다. 그래야 잘못된 오버로딩을 방지할 수 있다. 이 규칙에는 한가지 예외가 있다. 실체 클래스를 작성하면서 추상 메소드를 오버라이드 한다면 Override 주석을 잘 필요가 없다. 그러나 주의를 환기시키기 위해서 이 경우에도 Override 를 넣는 것이 좋다. Summary 수퍼 타입의 메소드를 오버라이드하는 모든 메소드에 Override 주석을 달아주면, 컴파일러가 굉장히 많은 에러를 막아줄 수 있다. concrete class, Effective JAVA, override, [Effective Java] Override 주.. 2017. 1. 3.
[Effective Java] 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. [Effective Java] 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. - 하나 이상의 타입 매개변수(type parameter)를 선언하고 있는 클래스나 인터페이스를 제네릭 클래스 또는 제네릭 인터페이스라고 한다. 제네릭 클래스와 인터페이스를 합해서 제네릭 타입이라고 부른다. 각 제네릭 타입에서는 매개변수화 타입(parameterized type)들을 정의한다. ( 이용 ) 실 타입 매개변수(actual type parameter)들은 제네릭 타입의 형식 타입 매개변수(formal type parameter)와 각각 대응된다. ( List 에서 String 이 실 타입 매개변수이고, 기존 T 혹은 E 가 타입 매개변수이다. ) - 각 제네릭 타입에서는 원천(raw)타입을 정의하는데.. 2016. 11. 21.
[iOS Study] UITableView 와 UITableViewController [iOS Study] UITableView 와 UITableViewController 출처 : 아론 힐리가스의 iOS 프로그래밍 -UITableView 는 여러 행을 가질 수 있는 단일 열에 데이터를 보여준다. -UITableView 의 dataSource 는 UITableViewDataSource 프로토콜을 따르는 한 어떠한 Objective-C 객체든 될 수 있다. -UITableViewController 클래스의 인스턴스는 뷰 컨트롤러, 데이터 소스, 델리게이트의 세 가지 역할을 다 할 수 있다. -UITableViewController 는 UIViewController 의 하위 클래스이기 때문에 view 프로퍼티를 가진다.UITableViewController 의 view 는 언제나 UITable.. 2016. 2. 20.
[iOS Study] 델리게이션과 텍스트 입력 [iOS Study] 델리게이션과 텍스트 입력 출처 : 아론 힐리가스의 iOS 프로그래밍 -UITextField 인스턴스는 사용자가 텍스트를 수정할 수 있게 해준다. -UIResponder 는 UIKit 프레임워크에 존재하는 추상 클래스이다.다음 세 클래스는 UIResponder 의 하위 클래스이다. UIView, UIViewController, UIApplication UIResponse 는 이벤트를 제어하는 메소드들을 정의한다.이벤트에는 터치 이벤트, 흔들기와 같은 모션 이벤트, 재생/정지와 같은 원격 제어 이벤트 등이 있다.하위 클래스들은 이런 이벤트에 응답하기 위해 각각에 따라 이들 메소드를 재정의한다. -UIWindow 는 다른 이벤트들에 응답할 객체를 가리키는 퍼스트 리스폰더 (first re.. 2016. 2. 19.
[iOS Study] 뷰 컨트롤러 [iOS Study] 뷰 컨트롤러 출처 : 아론 힐리가스의 iOS 프로그래밍 -뷰 컨트롤러는 UIViewController 의 하위 클래스 인스턴스이다.뷰 컨트롤러는 뷰 계층구조를 관리한다.뷰 컨트롤러는 계층구조를 구성하는 뷰 객체들을 만들고 뷰 객체와 관련된 이벤트를 제어하고, 윈도우에 뷰 계층구조를 추가하는 역할을 한다. -UIViewController 의 하위 클래스는 중요한 프로퍼티를 하나 상속받는다. @property (nonatomic, strong) UIView *view; 이 프로퍼티는 UIView 인스턴스를 가리킨다.뷰 컨트롤러의 View 가 윈도우의 하위뷰로 추가되면, 뷰 컨트롤러의 뷰계층 전부가 윈도우에 추가된다. -뷰 컨트롤러의 view 는 화면에 보여줄 필요가 있을 때까지 만들어지.. 2016. 2. 18.
반응형