본문 바로가기
[책 정리] 8장. OCP(Open Closed Principle): 개방-폐쇄 원칙 - Clean Architecture - 개방-폐쇄 원칙(OCP) 는 다음과 같다. "소프트웨어 개체(artifact)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다. 다시 말해 소프트웨어 개체의 행위를 확장할 수 있어야 하지만, 이 때 개체를 변경해서는 안 된다." 소프트웨어 아키텍처를 공부하는 가장 근본적인 이유가 바로 이 때문이다. 요구사항을 살짝 확장하는 데 소프트웨어를 엄청나게 수정해야 하면 이는 실패한 아키텍처이다. 사고 실험 - 재무제표를 웹 페이지로 보여주는 시스템이 있다고 하자. 웹 페이지에 표시되는 데이터는 스크롤 할 수 있고, 음수는 빨간색으로 출력한다. 이제 이해관계자가 동일한 정보를 보고서 형태로 변환해서 흑백 프린터로 출력해 달라는 요청이 왔다. 이 보고서에는 페이지 번호가 있어야 하고, 페이지마다 저절한.. 2020. 4. 12.
[Objective-C] 어플리케이션 구조 [Objective-C] 어플리케이션 구조 출처 : OS X 구조를 이해하면서 배우는 Objective-C Chap 16. Notice : 정리자(돼지왕 왕돼지)가 remind 하고 싶은 내용이나 모르는 내용 기반으로 정리하는 것이기 때문에 구체적인 내용은 책을 사서 보시기를 권장드립니다. 16.1. 애플리케이션 번들 * 16.1.1. 애플리케이션 번들 구조 -Cocoa 앱은 실행 파일이나 필요한 리소스 일체가 하나의 디렉토리 구성으로 저장된다.이것을 앱 번들(application bundle), 앱 랩퍼(wrapper) 또는 앱 패키지라고 부른다. -Mac OS X 는 서브 디렉터리가 많이 작성되지만, iOS는 실행 파일이나 각종 리소스도 비교적 구별 없이 저장된다.양쪽에 Info.plist 파일이 있.. 2018. 1. 8.
[Effective Objective-C] #48 반복문에는 블록 열거를 사용하라 [Effective Objective-C] #48 반복문에는 블록 열거를 사용하라 출처 : Effective Objective-C -최신 오브젝티브-C 에는 열거하는 방법이 많다.표준 C 반복문부터 오브젝티브-C 1.0의 NSEnumerator, 그리고 오브젝티브-2.0 의 빠른 열거자(fast enumeration)도 있다. for 루프 -컬렉션을 열거하는 첫 번째 메서드는 훌륭하고 오래된 방법인 for 루프다.NSArray *anArray = …;for (int i=0; i < anArray.count; i++){ id object = anArray[i]; // do something} 이 방법은 쓸만하지만 사전이나 집합을 반복하면 훨씬 복잡해진다.NSDictionary *aDictionary = ….. 2017. 10. 15.
[Django] 파이썬 웹 프로그래밍 - 파이썬 웹 표준 라이브러리 [Django] 파이썬 웹 프로그래밍 - 파이썬 웹 표준 라이브러리 - 책을 읽으며 Remind 하는 내용, 핵심 내용, 모르던 내용을 정리한 것입니다. 예문 및 자세한 설명은 책을 구매하여 보세요~ - 파이썬을 설치하면 기본적으로 같이 설치되는 표준 라이브러리가 있는데, 크게 웹 클라이언트 프로그래밍이냐 웹 서버 프로그래밍이냐에 따라 사용하는 라이브러리 모듈이 달라진다. - urllib 패키지에는 웹 클라이언트를 작성하는 데 사용되는 모듈들이 있으며, 가장 빈번하게 사용하는 모듈이다. http 패키지는 크게 서버용과 클라이언트용 라이브러리로 나누어 모듈을 담고 있고, urllib 에 비해 저수준의 API 를 제공한다. - 서버 프로그래밍에서는 http.cookie, .. 2016. 12. 8.
[Effective Java] 추상 클래스보다는 인터페이스를 사용하자. [Effective Java] 추상 클래스보다는 인터페이스를 사용하자. - 인터페이스(interface)와 추상클래스(abstract class)는 비슷하지만 다르다. 추상 클래스는 구현된 메소드를 포함할 수 있는 반면 인터페이스는 그렇지 못하다. 추상 클래스로 정의된 타입을 구현하는 클래스는 반드시 추상 클래스의 서브 클래스가 되어야 한다. 인터페이스를 구현하는 클래스의 경우 인터페이스에 정의된 모든 메소드를 구현하기만 하면 된다. 자바는 단일 상속만을 허용하므로 추상 클래스로 타입을 정의할 때 심한 제약이 따른다. - 인터페이스는 추상 클래스에 비해 변경과 적용이 쉽다. - 인터페이스는 믹스인(mixin)을 정의하는 데 이상적이다. 믹스인은 클래스가 자신의 본래 타입에 추가하여 구현할 수 있는 타입으.. 2016. 11. 7.
[Effective Java] 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. - 상속은 코드를 재사용하는 강력한 방법이다. 그러나 일을 하는데 가장 좋은 도구는 아니다. 잘못 사용하면 부실한 소프트웨어를 초래한다. - 동일 프로그래머가 서브 클래스와 수퍼 클래스의 구현을 관장하는 같은 패키지 내에서 상속을 사용하는 것은 안전하다 상속을 위해 특별히 설계되고 문서화된 클래스를 확장(extends) 하기 위해 상속을 사용하는 것도 안전하다. 그러나 다른 패키지에 걸쳐 일반적인 실체 클래스로부터 상속을 받는 것은 위험하다. - 상속은 캡슐화(encapsulation) 을 위배한다. 올바른 동작을 위해 서브 클래스는 자신의 수퍼 클래스가 구현하는 상세 내역에 의존한다. 수퍼 클래스의 구현 내역은 소프.. 2016. 10. 27.
[android] Serialization 을 사용할 때 다음의 예외를 고려하자. [android] Serialization 을 사용할 때 다음의 예외를 고려하자. serialVersionUID 를 명시적으로 주자. serialVersionUID 를 명시적으로 주지 않으면, compiler 가 계산한 값을 부여한다. 환경이 변하지 않으면 좋겠지만, compiler 가 계산한 값은 상황에 따라 값이 달라질 수 있다. serialVersionUID 가 매치하지 않는 경우에 deserialize 하려고 시도하면 InvalidClassException 이 발생한다. 잠재적 위험을 피하기 위해 serialVersionUID 를 명시적으로 주는 것이 좋다. 만~약 이전 버전에 이미 compiler 가 자동으로 할당한 serialVersionUID 값을 사용하게 되었다면, 그 값을 찾아 명시적으로.. 2015. 12. 17.
[Effective Java] 불필요한 객체의 생성을 피하자. 불필요한 객체의 생성을 피하자. - 기능적으로 동일한 객체를 필요할 때마다 매번 새로 생성하기보다는 하나의 객체를 재사용하는 것이 좋을 때가 많다. 재사용을 하면 객체 생성에 소요되는 비용(시간과 자원)이 절감되어 실행 속도가 더 빨라지고 코드도 보기 좋게 작성할 수 있다. 불변(immutable) 객체는 항상 재사용이 가능하다. - 불 필요한 객체 생성을 막기 위한 첫번째 좋은 방법은 static 팩토리 메소드를 사용하는 것이다. - 불변객체가 아닌 가변객체더라도 상태가 변경되지 않는 것이 보장되면 재사용 가능하다. - 재사용을 막기 위한 static 팩토리 메소드에서 늦 초기화 ( lazy initialization ) 을 하는 경우가 있는데, 후에 다루겠지만 두드러진 성능 개선이 나타나진 않고, 오.. 2015. 4. 30.
[linux] 계정 비밀번호 변경하기. linux, 계정 비밀번호 변경하기 $ sudo passwd USER_ID 다음의 과정을 통해 비밀번호를 변경한다. 1. 현재 비밀번호 입력2. 새로운 비밀번호 입력3. 새로운 비밀번호 확인 입력. 비밀번호가 변경되었다! account, linux, linux 비밀번호, [linux] 계정 비밀번호 변경하기., 계정, 계정 비밀번호 변경하기, 변경, 비밀번호, 비밀번호 변경, 비밀번호 확인, 새로운 비밀번호, 현재 비밀번호 2014. 2. 13.
반응형