본문 바로가기
[책 정리] 11장. DIP(Dependency Inversion Principle) : 의존성 역전 원칙 - Clean Architecture -의존성 역전 원칙(DIP)에서 말하는 유연성이 극대화된 시스템이란 소스 코드 의존성이 추상(abstraction)에 의존하며 구체(concrete)에는 의존하지 않는 시스템이다.자바와 같은 정적 타입 언어에서 이 말은 use, import, include 구문은 오직 인터페이스나 추상 클래스 같은 추상적인 선언만을 참조해야 한다는 뜻이다.구체적인 대상에는 절대로 의존해서는 안 된다. DIP 를 논할 때 운영체제나 플랫폼 같이 안전성이 보장된 환경에 대해서는 이를 무시하는 편이다.이들 환경에 대한 의존성은 용납하는데, 변경되지 않는다면 의존할 수 있다는 사실을 이미 알고 있기 때문이다. -우리가 의존하지 않도록 피하고자 하는 것은 바로 변동성이 큰(volatile) 구체적인 요소다.그리고 이 구체적인 요.. 2020. 4. 15.
[Objective-C] 카테고리 개념 ( Category ) [Objective-C] 카테고리 개념 ( Category ) http://soooprmx.com/wp/archives/2436#disqus_thread -기존에 정의된 어떤 클래스를 쉽게 확장할 수 있게 해준다.카테고리를 적용하면, 이 녀석을 사용하는 녀석은 물론 상속받는 녀석까지 확장된 기능을 사용할 수 있다. -왜 이름이 카테고리냐하면...범용적으로 사용되는 Class 를 확장해서 사용을 한다고 생각을 한다면, 이 기능 저 기능 다 쑤셔넣어서 유지보수가 어려운 코드가 될 수 있다.이 녀석을 SomeClassA, SomeClassA+Network, SomeClass+Graphic 과 같이 카테고리화해서 확장해서 사용하는 것을 목적으로 설계되었기 때문에, 이 녀석을 카테고리라고 부른다. -header .. 2017. 7. 18.
[Java Concurrency] 작업 실행 [Java Concurrency] 작업 실행 - 앱이 해야 할 일을 "작업"이라는 단위로 분할하면 프로그램의 구조를 간결하게 잡을 수 있고, 트랜잭션의 범위를 지정함으로써 오류에 효과적으로 대응할 수 있고, 작업 실행 부분의 병렬성을 자연스럽게 극대화 할 수 있다. 6.1. 스레드에서 작업 실행 - 프로그램에서 일어나는 일을 작업이라는 단위로 재구성하고자 한다면 가장 먼저 해야 할 일은 작업의 범위를 어디까지로 할 것인지 정하는 일이다. 원론적으로 보자면 작업은 완전히 독립적인 동작을 말한다. 독립성이 갖춰져 있어야 병렬성을 보장할 수 있다. 작업을 스케쥴링하거나 부하 분산(load balancing)을 하고자 할 때 폭넓은 유연성을 얻으려면 각 작업이 앱의 전체적인 업무 내용 가운데 충분히 작은 부분을.. 2017. 4. 24.
[Effective Java] Override 주석을 일관성 있게 사용하자. [Effective Java] Override 주석을 일관성 있게 사용하자. - 슈퍼 클래스의 메소드를 오버라이드 한다고 생각되는 모든 메소드에 Override 주석을 사용해야 한다. 그래야 잘못된 오버로딩을 방지할 수 있다. 이 규칙에는 한가지 예외가 있다. 실체 클래스를 작성하면서 추상 메소드를 오버라이드 한다면 Override 주석을 잘 필요가 없다. 그러나 주의를 환기시키기 위해서 이 경우에도 Override 를 넣는 것이 좋다. Summary 수퍼 타입의 메소드를 오버라이드하는 모든 메소드에 Override 주석을 달아주면, 컴파일러가 굉장히 많은 에러를 막아줄 수 있다. concrete class, Effective JAVA, override, [Effective Java] Override 주.. 2017. 1. 3.
[Effective Java] 상속을 위한 설계와 문서화를 하자. 그렇지 않다면 상속의 사용을 금지시킨다. 상속을 위한 설계와 문서화를 하자. 그렇지 않다면 상속의 사용을 금지시킨다. - 메소드 오버라이딩으로 인한 파급 효과를 분명하게 문서화해야 한다. 같은 클래스의 다른 메소드들이 호출하는지에 대해 반드시 문서화해야 한다. ( self-use ) - 각각의 public 이나 protected 메소드 및 생성자가 어떤 오버라이드 가능한 메소드를 호출하는지, 어떤 순서로 하는지, 호출한 경로가 다음 처리에 어떤 영향을 주는지에 대해서도 반드시 문서화해야 한다. 오버라이드 가능하다는 것은 final 이 아니면서 public 이나 protected 인 경우를 의미한다. - 관례적으로 오버라이드 가능한 메소드를 호출하는 메소드에는 문서화 주석의 제일 끝에 그런 호출에 대한 설명을 추가한다. 그리고 설명의 시작은 "이.. 2016. 11. 1.
[Effective Java] clone 메소드는 신중하게 오버라이드 하자. [Effective Java] clone 메소드는 신중하게 오버라이드 하자. - Cloneable 인터페이스는 복제를 허용하는 객체라는 것을 알리는 목적으로 사용하는 믹스인 인터페이스( mixin interface ) 이다. 믹스인 인터페이스이기 때문에 자신이 clone method 를 가지고 있는 것도 아니다. Object 의 clone 은 Cloneable 을 implement 하지 않으면 사용할 수 없다. - Cloneable 을 implements 한 class 에 clone 을 호출하면, 해당 객체의 복제본을 만들어 반환한다. 복제 객체는 원본 객체와 같은 필드를 가지며 각 필드의 값도 복사된다. 하지만 reference 를 가진 녀석들은 deep copy 가 아닌 soft copy 를 수행한다.. 2016. 10. 10.
[Effective Java] toString 메소드는 항상 오버라이드 하자. [Effective Java] toString 메소드는 항상 오버라이드 하자. - 일반적인 toString() 메소드는 "ClassName@HashCode" 와 같은 형식으로 표시된다. - toString 의 보편적 계약은 간결해야 하지만 사람이 읽기 쉬운 형태의 정보 표현이어야 한다 - 가능하다면 toString 메소드에서는 객체의 모든 중요한 정보를 반환해야 한다. - toString 에서 출력하는 문자열이 한 눈에 무엇인지 파악하기 어렵다면, 문서화를 정확히 해야 한다. className, default, Effective JAVA, hashcode, human readable, override, toString, [Effective Java] toString 메소드는 항상 오버라이드 하자., 간결.. 2016. 10. 7.
[Effective Java] equals 메소드를 오버라이드 할 때는 hashCode 메소드도 항상 같이 오버라이드 하자. equals 메소드를 오버라이드 할 때는 hashCode 메소드도 항상 같이 오버라이드 하자. - equals 메소드를 오버라이드 하는 모든 클래스에서는 반드시 hashCode 메소드도 오버라이드 해야 한다. 그렇게 하지 않으면 Object.hashCode 메소드의 보편적 계약을 위반하게 되어, HashMap 과 HashSet 및 HashTable 을 포함하는 모든 hash 기반 컬렉션들에서 제대로 작동 안 할 수 있다. - HashCode 의 메소드 명세 계약 사항은 아래와 같다. 1. equals 메소드에서 비교하는 객체의 값이 변경되지 않는다면, 여러번 호출해도 일관성 있는 정수를 반환해야 한다. ( 단 어플리케이션이 재실행 될 때까지 같을 필요는 없다. ) 2. equals 메소드 호출 결과 두 .. 2016. 10. 5.
[Effective Java] Chap 3. 모든 객체에 공통적인 메소드. [Effective Java] Chap 3. 모든 객체에 공통적인 메소드. - Object 는 실체 클래스( concrete class ) 지만 원래 상속을 목적으로 설계되었다. equals, hashCode, toString, clone, finalize 는 다른 모든 자바 클래스에서 전체적으로 준수해야 하는 보편적 계약을 내포하고 있다. Object 의 모든 서브 클래스에서 그메소드들을 오버라이드 하도록 설계되었기 때문이다. - 어떤 클래스에서 보편적 계약 준수에 실패하면 그 계약에 준하는 HashMap 이나 HashSet, ArrayList 등과 같은 다른 클래스들과 함께 사용할 때 올바르게 동작하지 않는다. [Effective Java] equals 메소드를 오버라이드 할 때는 hashCode 메.. 2015. 12. 23.
반응형