본문 바로가기
[책 정리] 8장. OCP(Open Closed Principle): 개방-폐쇄 원칙 - Clean Architecture - 개방-폐쇄 원칙(OCP) 는 다음과 같다. "소프트웨어 개체(artifact)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다. 다시 말해 소프트웨어 개체의 행위를 확장할 수 있어야 하지만, 이 때 개체를 변경해서는 안 된다." 소프트웨어 아키텍처를 공부하는 가장 근본적인 이유가 바로 이 때문이다. 요구사항을 살짝 확장하는 데 소프트웨어를 엄청나게 수정해야 하면 이는 실패한 아키텍처이다. 사고 실험 - 재무제표를 웹 페이지로 보여주는 시스템이 있다고 하자. 웹 페이지에 표시되는 데이터는 스크롤 할 수 있고, 음수는 빨간색으로 출력한다. 이제 이해관계자가 동일한 정보를 보고서 형태로 변환해서 흑백 프린터로 출력해 달라는 요청이 왔다. 이 보고서에는 페이지 번호가 있어야 하고, 페이지마다 저절한.. 2020. 4. 12.
[Effective Java] Serializable 인터페이스를 분별력 있게 구현하자. [Effective Java] Serializable 인터페이스를 분별력 있게 구현하자. - 객체 직렬화(object serialization) API 는 객체를 바이트 스트림으로 인코딩하고, 인코딩된 바이트 스트림으로부터 객체를 복원(디코딩) 하는 프레임워크이다. - 객체를 바이트 스트림으로 인코딩하는 것을 직렬화(serializing)이라 하고, 그 반대의 절차를 역직렬화(deserializing)이라고 한다. - 객체가 일단 직렬화되면, 인코딩된 객체는 향후에 역직렬화 하기 위해 하나의 실행 중인 VM 에서 다른 VM 으로 전송되거나 디스크에 저장될 수 있다. 직렬화는 원격 통신을 위한 표준 통신 회선 수준의 객체 표현을 제공한다. 직렬화 프록시는 effective java 의 직렬화 주제중 가장 .. 2017. 3. 21.
[Effective Java] 인터페이스를 사용해서 확장 가능한 enum 을 만들자. [Effective Java] 인터페이스를 사용해서 확장 가능한 enum 을 만들자. - 대개의 경우 enum 의 확장은 좋지 않은 생각으로 밝혀졌다. - 확장 가능한 enum 타입을 사용해야 할 경우가 최소한 한 가지가 있는데, 작동 코드(operation code) 또는 opcode 라고 하는 것으로 특정 머신의 작동을 나타내는 요소들을 갖는 enum 타입이다. - 인터페이스를 구현한 enum 에 generic 을 설정할 경우는 아래와 같이 할 수 있다. bounded wild card Class opSet // class 객체가 enum 과 Operation 서브 타입 모두임을 나타냄. unbounded wild card Collection 2016. 12. 29.
[Effective Java] 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. - 상속은 코드를 재사용하는 강력한 방법이다. 그러나 일을 하는데 가장 좋은 도구는 아니다. 잘못 사용하면 부실한 소프트웨어를 초래한다. - 동일 프로그래머가 서브 클래스와 수퍼 클래스의 구현을 관장하는 같은 패키지 내에서 상속을 사용하는 것은 안전하다 상속을 위해 특별히 설계되고 문서화된 클래스를 확장(extends) 하기 위해 상속을 사용하는 것도 안전하다. 그러나 다른 패키지에 걸쳐 일반적인 실체 클래스로부터 상속을 받는 것은 위험하다. - 상속은 캡슐화(encapsulation) 을 위배한다. 올바른 동작을 위해 서브 클래스는 자신의 수퍼 클래스가 구현하는 상세 내역에 의존한다. 수퍼 클래스의 구현 내역은 소프.. 2016. 10. 27.
[iOS Study] 코어 데이터 [iOS Study] 코어 데이터 출처 : 아론 힐리가스의 iOS 프로그래밍 -데이터를 로컬에 저장하는 방법은 “아카이빙” 또는 “코어 데이터” 를 사용한다. -아카이빙의 가장 큰 결점은 전부 다냐 아무것도 아니냐는 특성에 있다.아카이브 안의 내용에 접근하려면 전체 파일을 언아카이브해야 한다.변경사항을 저장하려면 전체 파일을 다시 쓰기 해야 한다.반면 코어 데이터(Core Data)는 저장된 객체의 일부만 가져올 수 있다.그리고 어떤 객체를 변경한다면 파일의 해당 부분만 갱신할 수 있다.이러한 점진적 가져오기, 업데이트, 삭제, 삽입은 파일시스템과 메모리 사이를 오가는 많은 모델 객체를 가지는 경우 앱의 급격한 성능 향상을 가져올 수 있다. -코어 데이터는 객체-관계형 매핑 ( object-relatio.. 2016. 3. 25.
[iOS Study] 지역화 [iOS Study] 지역화 출처 : 아론 힐리가스의 iOS 프로그래밍 -국제화(internationalization)은 각 나라의 고유 문화 정보를 앱에 하드 코딩 없이 적용하는 것이다.(문화적 정보는 언어, 통화, 날짜 포맷, 숫자 포맷 등을 뜻한다.) -지역화(localization) 은 사용자의 언어와 지역 포맷 설정을 기반으로 앱에 적절한 데이터를 제공하는 과정이다.이러한 설정은 설정 앱에서 찾을 수 있다.[일반] 항목에서 [다국어] 열을 선택하면 된다. -internationalization 은 i18n 으로localization 은 l10n 으로 축약해서 쓰기도 한다. -국제화는 NSDateFormatter 와 같은 Formatter 를 사용해서 구현한다.NSDateFormatter 는 사용.. 2016. 3. 17.
[iOS Study] Objective-C [iOS Study] Objective-C 출처 : 아론 힐리가스의 iOS 프로그래밍 -iOS 앱은 코코아 터치(Cocoa Touch) 프레임워크를 사용하여 Objective-C 언어로 작성된다.Objective-C 는 C 언어의 확장이며 코코아 터치 프레임워크는 Objective-C 클래스의 모음이다. - 일반적으로 Objective-C 에서는 인스턴스 변수명을 밑줄(_) 로 시작한다. - 객체를 만들기 위해서는 클래스에 alloc 메세지를 보낸다. 이에 클래스는 메모리(힙)에 객체를 만들고 변수에 저장된 그 객체의 주소를 준다. -Party* partyInstance = [Party alloc];[partyInstance init]; 새로 할당한 인스턴스에 보내는 첫 메시지는 항상 초기화 메시지다. .. 2016. 2. 13.
Objective-C 고급 ( Advanced Objective-C ) Objective-C 고급 ( Advanced Objective-C ) 출처 : http://www.tutorialspoint.com/objective_c/objective_c_classes_objects.htm > - class 는 @interface 와 @implementation 의 두 파트로 나뉘어 정의된다. - 대부분이 objects 를 상속한다. - objects 는 메세지를 받기 때문에 receiver 로 불리기도 한다. - Properties 는 다른 class 에서의 access 를 접근하도록 도와준다. - ex) @interface Box:NSObject { double length; double breadth; } @property(nonatomic, readwrite) double .. 2015. 6. 18.
[Java] Variable Argument 가변인자!? 자바, 가변인자 ( Variable Argument ) 이전부터 알고 있었지만, 기억나지 않고 딱히 쓸 일이 없어서 자주 잊어먹는 가변인자. 이 녀석은 용어도 조금 생소하다. 이 녀석은 영어로 하면 Variable Argument. 즉 argument 가 가변적이라는 이야기인데.. 다시 이야기하면, 인자가 몇개가 될지 확실치 않을 때 확장성 있게 정해진 갯수가 아닌, caller 쪽에서 정하는 갯수의 argument 를 갯수 상관없이 마음껏 받을 수 있다는 이야기. 이 녀석은 잘만 쓰면 정말 유용하게 쓰일 수도 있기는 하다. 기본 syntax 만 정리하고 넘어가자. public void printSth ( String ... printTarget ){ for( int i=0; i < printTarget.. 2013. 9. 19.
반응형