목록전체 글 (20)
블로그명..?
Gradle 세팅 후 리빌드 할 때 다음과 같은 오류가 발생하면서 빌드 실패가 발생 Could not GET 'https://jcenter.bintray.com/com/github/jnr/jffi/maven-metadata.xml'. Received status code 502 from server: Bad Gateway 찾아 보니 원인은 jcenter Bintray 다운로드 서버 다운이었다 https://status.bintray.com/ Bintray Status All Systems Operational Website Operational REST API Operational Downloads Operational Operational Degraded Performance Partial Outage..
개방-폐쇄 원칙(OCP)라는 용어는 1988년에 버트란트 마이어가 만들었는데, 다음과 같다. 소프트웨어 개체는 확장에는 열려 있어야하고, 변경에는 닫혀 있어야 한다. 이는 소프트웨어 개체의 행위는 확장할 수 있어야 하지만, 이때 개체를 변경해서는 안 된다는 뜻이다. 만약 요구사항을 확장하는 데 소프트웨어를 많이 수정해야 한다면, 그 소프트웨어 시스템을 설계한 아키텍트는 엄청난 실패를 한 것이다. 사고 실험 재무제표를 웹 페이지로 보여주는 시스템이 있다고 생각해보자. 웹 페이지에 표시되는 데이터는 스크롤할 수 있으며, 음수는 빨간색으로 출력한다. 이것을 이해관계자가 보고서 형태로 변환해서 흑백 프린터로 출력해 달라고 요청했다고 해보자. 바뀌는 부분 데이터 : 재무 데이터 -> 보고서용 재무 데이터 출력 방..
SOLID 원칙 중에서 그 의미가 가장 잘 전달되지 못한 원칙은 바로 단일 책임 원칙이다. -> 모든 모듈이 단 하나의 일만 해야 한다는 의미가 아니다. 단 하나의 일만 해야 한다는 원칙은 따로 있다. 바로 함수는 반드시 하나의, 단 하나의 일만 해야 한다는 원칙이다. 이 원칙은 커다란 함수를 작은 함수들로 리팩토링 하는 더 저수준에서 사용된다. 이 원칙은 SOLID 원칙이 아니며, SRP도 아니다. SRP는 다음과 같이 기술되어 왔다. 단일 모듈은 변경의 이유가 하나, 오직 하나뿐이어야 한다. 소프트웨어 시스템은 사용자와 이해관계자를 만족시키기 위해 변경된다. SRP가 말하는 '변경의 이유'란 바로 이들 사용자와 이해관계자를 가리킨다. 이 원칙은 아래와 같이 바꿔 말할 수도 있다. 하나의 모듈은 하나의..
함수형 프로그래밍이라는 개념은 프로그래밍그 자체보다 앞서 등장했다. 이 패러다임에서 핵심이 되는 기반은 람다 계산법으로 알론조 처치가 1930년대에 발명했다. 아래는 25까지의 정수의 제곱을 출력하는 자바 언어의 예시이다. public class Squint { public static void main(String args[]) { for (int i=0; i ex) range 함수 호출 : (range) 표현식 (fn [x] (* x x)) 는 익명 함수로, 곱셈 함수를 호출하면서 입력 인자를 두 번 전달한다. (입력의 제곱을 계산한다.) 전체 코드를 다시 해석해보자. range 함수는 0부터 시작해서 끝이 없는 정수 리스트를 반환한다. 반환된 정수 리스트는 map 함수로 전달되고, 각 정수에 대해 ..
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)다. 프로그래머를 고용하는 이유는 이해관계자를 위해 기계가 수익을 창출하거나 비용을 절약하도록 만들기 위해서다. 그리고 이해관계자의 기계가 이러한 요구사항을 만족하도록 코드를 작성한다. 그리고 기계가 이러한 요구사항을 위반하면, 프로그래머는 디버거를 열고 문제를 고친다. 많은 프로그래머가 이러한 활동이 자신이 해야 할 일의 전부라고 생각한다. 이들은 요구사항을 기계에 구현하고 버그를 수정하는 일이 자신의 직업이라고 믿는다. ..