목록CleanArchitecture (13)
블로그명..?
OO란 무엇인가? 데이터와 함수의 조합? 이는 터무니없는 말이다. o.f() f(o)와 다르다는 의미를 내포하기 때문이다. 실제 세계를 모델링하는 새로운 방법? 이는 얼버무리는 수준에 지나지 않는다. 의도가 불분명하며, 그 정의가 너무 모호하다. 캡슐화, 상속, 다형성? OO(Obejct-Oreiented)가 이 세 가지 개념을 적절하게 조합한 것이거나, 또는 최소한 세 가지 요소를 반드시 지원해야 한다고 말한다. 이 세 가지 개념에 대해 살펴보자. 캡슐화? OO를 정의하는 요소 중 하나로 캡슐화를 언급하는 이유는 데이터와 함수를 쉽교 효율적으로 캡슐화하는 방법을 OO언어가 제공하기 때문이다. 데이터와 함수가 응집력 있게 구정된 집단을 서로 구분 짓는 선을 그을 수 있다. 구분선 바깥에서 데이터는 은닉되..
구조적 프로그래밍 개요 1968년 에츠허르 비버 데이크스트라가 발견 데이크스트라는 무분별한 점프(goto 문장)는 프로그램 구조에 해롭다는 사실을 제시 데이크스트라는 점프들을 if/then/else와 do/while/untill과 같이 더 익숙한 구조로 대체했다. 구조적 프로그래밍은 제어흐름 직접적인 전환에 대해 규칙을 부과한다. 구조적 프로그래밍 모든 프로그램은 인간의 두뇌로 감당하기에는 너무 많은 세부사항을 담고 있었다. 아주 작은 세부사항이라도 간과하면 프로그램이 동작하는 것처럼 보이더라도 결국엔 예상 외의 방식으로 실패하곤 했다. 데이크스트라는 증명(proof)이라는 수학적인 원리를 적용하여 이 문제를 해결하고자 했다. 그것은 공리, 정리, 따름정리, 보조정리로 구성되는 유클리드 계층구조를 만드는..
구조적 프로그래밍 최초로 적용된 패러다임(최초로 만들어진 패러다임은 아니다) 1968년 에츠허르 비버 데이크스트라가 발견 데이크스트라는 무분별한 점프(goto 문장)는 프로그램 구조에 해롭다는 사실을 제시 데이크스트라는 점프들을 if/then/else와 do/while/untill과 같이 더 익숙한 구조로 대체했다. 구조적 프로그래밍은 제어흐름 직접적인 전환에 대해 규칙을 부과한다. 객체 지향 프로그래밍 1966년, 올레 요한 달과 크리스텐 니가드에 의해 등장 ALGOL언어의 함수 호출 스택 프레임을 힙(Heap)으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있었음을 발견 이러한 함수가 클래스의 생성자가 되었고, 지역 변수는 인스턴스 변수, 중첩 함수는 메서드..
모든 소프트웨어 시스템은 이해관계자에게 서로 다른 두 가지 가치를 제공하는데, 행위(behavior)와 구조(structure)가 바로 그것이다. 소프트웨어 개발자는 두 가지를 모두 반드시 높게 유지해야 하는 책임을 진다. 행위 소프트웨어의 첫 번째 가치를 바로 행위(behavior)다. 프로그래머를 고용하는 이유는 이해관계자를 위해 기계가 수익을 창출하거나 비용을 절약하도록 만들기 위해서다. 그리고 이해관계자의 기계가 이러한 요구사항을 만족하도록 코드를 작성한다. 그리고 기계가 이러한 요구사항을 위반하면, 프로그래머는 디버거를 열고 문제를 고친다. 많은 프로그래머가 이러한 활동이 자신이 해야 할 일의 전부라고 생각한다. 이들은 요구사항을 기계에 구현하고 버그를 수정하는 일이 자신의 직업이라고 믿는다. ..
설계와 아키텍처의 차이점 설계 - 저수준의 구조와 결정사항을 의미하는 용어로 사용되어 진다. 아키텍처 - 고수준의 구조와 결정사항을 의미하는 용어로 사용되어 진다. 하지만 저수준과 고수준의 구조를 마땅히 구분할 만한 경계가 없다. 즉, 설계와 아키텍처 사이에는 아무런 차이가 없다. 소프트웨어 아키텍처의 목표 - 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다. 시스템을 급하게 만들거나, 결과물의 총량을 순전히 프로그래머 수만으로 결정하거나, 코드와 설계의 구조를 깔끔하게 만들려는 생각을 전혀 하지 않으면, 파국으로 치닫는 이 비용 곡선에 올라타게 된다. '토끼와 거북이' "급할수록 돌아가라." 토끼와 거북이 우화는 지나친 과신이 가진 어리석음을 말해준다. 현대의 개발자는 "코드..