본문 바로가기

프로그래밍68

[3부 코드의 모습] Chapter15 소프트웨어의 진화 또는 혁명? 소프트웨어의 부패 언제든지 소프트웨어 개발 기간 중에서 유지보수 국면이 가장 오래 걸린다 프로젝트가 완료되었다고 간주된 다음에 더 많은 코드가 작성된다 유지보수 프로그래머는 원작성자의 머리 속에 있는 코드 모델을 알지 못할 수 도 있다; 그것이 적절하지 못한 수정의 원인이 된다 코드를 수정하다가 품질이 떨어지기는 아주 쉽다는 사실을 알아두자. 시스템을 더 나쁘게 만드는 변경을 하고서 만족스러워하지 말자 경고 신호 규모가 큰 클래스와 복잡하고 이해하기 어려운 함수들이 코드 여기저기에 많이 흩어져 있다 함수 이름이 암호 같거나 오해를 하게 만든다 구조가 없다: 어떤 기능을 어디에서 찾을지가 명료하지 않다 중복이 있다: 똑같은 일을 하는 코드 조각이 여러 번 나타난다 커플링이 높다: 의존성이 높다 데이터가 여.. 2017. 11. 18.
[3부 코드의 모습] Chapter14 소프트웨어 아키텍처 소프트웨어 아키텍처란? 상위 수준의 설계 소프트웨어의 청사진 아키텍처 수준의 관점 핵심이 되는 소프트웨어 모듈들을 식별 어느 컴포넌트가 어느 컴포넌트와 통신하는지 식별 여러 가지 서브시스템의 올바른 역할과 책임을 명시하고, 시스템에 있는 모든 중요한 인터페이스들의 특성을 식별하고 결정하도록 도와준다 우아하게 개발~~ 매번 나오는 이야기 아키텍처는 소프트웨어 시스템의 설계와 미래 성장에 가장 큰 영향력을 미친다. 그러므로 개발 단계에서 일찍 올바른 아키텍처를 만들어두는 것이 극히 중요 조망도(view) 아키텍처를 설계하는 과정에서도 여러 개의 소프트웨어 조망도를 개발해야 한다 개념 조망도 시스템에서 중요한 부분과 그 부분들의 상호연결을 보여주는 조망도 구현 조망도 실제로 구현된 모듈을 가지고 제시 프로세스.. 2017. 11. 17.
[3부 코드의 모습] Chapter13 웅대한 설계 바람직한 소프트웨어 설계를 하는 방법 코드 설계의 품질은 원숙한 프로그래머임을 나타내는 지표다. 설계로서의 프로그래밍 프로그래밍이라는 행위는 초기에 설계하면서 결정했던 것을 검증하고, 나머지 설계 작업을 수행하는 것이다 설계는 당연히 먼저 해야 하는 일이다 우리는 무엇을 설계하는가? 설계는 개발 프로세스의 각 단계에서 주어진 일을 구성요소들로 나누고, 각 구성요소가 작동하는 방법을 생각해내는 과정이다 소프트웨어의 설계 수준 시스템아키텍처 아키텍처 설계는 전체 시스템의 성능과 특성에 미치는 영향력이 가장 크고, 특정한 코드 행에 미치는 영향력은 가장 적다. 모듈/컴포넌트 각각의 서브시스템을 알기 쉬운 더 작은 모듈들로 나누는 것이다 나중에 쉽게 바꿀 수 없다 클래스와 데이터 타입 모듈을 한입 크기의 덩어리.. 2017. 11. 16.
[2부 코드의 비밀스러운 일생] Chapter12 불안전 콤플렉스 안전한 소프트웨어를 구축할 책임은 누구에게 있을까? 그 골칫덩어리는 우리의 것이다! 위험 도둑이 랩톱이나 PDA를 훔쳐서 보안이 안 된 민감한 데이터를 읽을 수 있다 결함이 있는 입력 루틴이 악용되면 많은 종류의 손상을 일으킬 수 있다 권한 상승이란 제한된 접근 권한을 가진 사용자가 시스템을 속여 보안 수준을 얻는 것 통신을 할 때, 데이터가 암호화되지 않은 상태로 불안전한 매체를 통과하면 도중에있는 모든 컴퓨터가 그 데이터를 빨아들여서 읽을 수 있다 보안이 코드 작성뿐만 아니라 시스템 관리와도 관련이 있다 조심성 없는 사용자가 쓸데없이 시스템을 열어두어서 공격 받기 쉬운 상태로 내버려둘 수 있다 시스템에 대한 접근 허용을 느슨하게 설정해 두면 사용자들이 시스템의 민감한 부분에 접근 할 수 있다 컴퓨터 .. 2017. 11. 15.
[2부 코드의 비밀스러운 일생] Chapter11 속도의 필요성 이 장의 내용 왜 효울적인 코드가 중요한가 효율적인 코드 설계하기 기존 코드의 성능 향상시키기 인생에는 속도를 높이는 것보다 더 중요한 일이 있습니다. - 마햐트마 간디 다른 어떤 이유보다 더 많은 컴퓨팅 죄악이 효율성이라는 이름으로 - 효율성을 성취하지도 못하면서 - 자행됩니다. 맹목적인 어리석음으로 인한 것보다 더 많습니다. - W. A. 울프 (유명한 컴퓨터 과학자) 최적화는 소프트웨어 개발을 위협하는 망령이다!! 최적화는 낡아빠진 주제라서 이미 모든 사람들이 그에 대한 의견을 내놓았고, 똑같은 충고가 재삼재사 거론되어 왔다. 그럼에도 불구하고 아직도 많은 코드들이 현명하게 개발되지 못하고 있다 효율성, 성능, 필요하지 않은 최적화 등을 하고 있다. 최적화란 무엇인가? 최적화 순수한 의미는 개선을 .. 2017. 11. 14.
[2부 코드의 비밀스러운 일생] Chapter10 잭이 빌드한 코드 빌드: 고급 언어 프로그램을 배포 가능한 실행 파일로 변환하는 작업 우리는 C컴파일러에 어떤 옵션이 넘겨지는지 모른다거나, 오브젝트 파일에 어떤 수준의 설비가 남겨지는지 모른다며느 당신은 그 빌드 시스템에 대해 진정한 통제권을 가지고 있다고 할 수 없다! 언어 장벽 세 개의 주요한 메커니즘 인터프리트 언어, 컴파일 언어, 바이트 컴파일 언어 인터프리트 언어 특정한 빌드 국면을 거칠 필요가 없다 Perl, Python, JavaScript 장점은 개발 속도 프리컴파일: 소스파일을 실행하기 전에 빌드 JIT(Just-in-Time)컴파일: 함수 각각을 실행에 임박했을 때 컴파일하는 방법 스크립트 언어도 포함 컴파일 언어 개별적인 소스 파일 가각이 중간 오브젝트 파일로 컴파일되고, 그 다음에 오브젝트 파일들이.. 2017. 11. 12.