코딩은 주댕이로
-
Ch7. 함께 모으기코딩은 주댕이로/객체지향의 사실과 오해 2022. 4. 4. 20:34
마틴 파울러는 객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점에 대해 설명한다. 개념 관점, 명세 관점, 구현 관점 개념 관점: 사용자가 도메인을 바라보는 관점을 반영한다. 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심 명세 관점: 프로그래머는 객체가 협력을 위해 ‘무엇'을 할 수 있는가에 초점을 맞춘다. 구현 관점: 객체들이 책임을 수행하는 데 필요한 동작하는 코드를 작성하는 것. 책임을 ‘어떻게' 수행할 것인가에 초점 개념 관점, 명세 관점, 구현 관점은 동일한 클래스를 세 가지 다른 방향에서 바라보는 것을 의미한다. 클래스는 세 가지 관점을 모두 수용할 수 있도록 개념, 인터페이스, 구현을 함께 드러내야 한다. 동시에 코드 안에서 세 가지 관점을 쉽게 식별할 수 있도록 깔끔..
-
Ch6. 객체 지도코딩은 주댕이로/객체지향의 사실과 오해 2022. 3. 9. 01:08
유일하게 변하지 않는 것은 모든 것이 변한다는 사실뿐이다. 여행 중에 길을 모르면 지나가는 사람에게 묻는다. (길을 찾는 기능을 통해 해결) 지도를 보고 찾아간다. (길을 찾아주는 구체적 기능이 아닌 길을 찾을 수 있는 구조를 통해 해결) 여기까진 뭐지..? 했음 기능 설계 대 구조 설계 기능 측면의 설계는 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다. 구조 측면의 설계는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다. 성공적인 소프트웨어들이 지닌 공통적인 특징은 훌륭한 기능을 제공하는 동시에 사용자가 원하는 새로운 기능을 빠르고 안정적으로 추가할 수 있다는 것이다. 미래에 대비하는 가장 좋은 방법은 변경을 예측하는 것이 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓는 것이..
-
Ch5. 책임과 메시지코딩은 주댕이로/객체지향의 사실과 오해 2022. 3. 9. 01:08
자율적인 책임 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체 외부의 간섭을 받아선 안된다. 자신의 의지에 따라 증언할 수 있는 자유 객체가 책임을 자율적으로 수행하려면 책임이 자율적이어야 한다. → 책임이 자율적? 뭔소리? 자율적인 책임 증언하라 상세한 수준의 책임 목격했던 장면을 떠올려라 (난 기억력이 안좋아서 메모를 하는 타입인데..?) 시간의 순서대로 재구성하라 (순서를 편집할 수 없음) 말로 간결하게 표현하라 (난 말솜씨가 안좋아서 서류로 제출하고 싶은데?) → 자유의 범위를 지나치게 제한하고 있다. 증언이라는 책임을 수행하는데 왕의 명령에 지나치게 의존적이다. 너무 추상적인 책임 너무 구체적인 것도 문제지만 너무 추상적인 것 역시 문제다. ‘증언하라’가 아닌 ‘설명..
-
Ch3. 타입과 추상화코딩은 주댕이로/객체지향의 사실과 오해 2022. 3. 9. 01:07
추상화를 통한 복잡성 극복 이 추상화가 유용했던 이유는 승객들이 지하철을 바라보는 모델과 일치했기 때문 → 역의 위치가 중요한 것이 아니라 역와 역 사이의 연결이 중요하다고 생각함 추상화 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다. 복잡성을 다루기 위해 추상화는 두 차원에서 이뤄진다[Kramer 2007]. 첫 번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것이다. 두 번째 차원은 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것이다. 객체지향과 추상화 ‘기껏해야 트럼프에 불과해' 모든 트럼프 객체를 ‘트럼프'로 일반화 하였음 사람들은 본능적으로 공통적인 특성을 기준으로 객체를 여러 그룹..
-
Ch2. 이상한 나라의 객체코딩은 주댕이로/객체지향의 사실과 오해 2022. 3. 9. 01:06
인간은 세상에 존재하는 다양한 객체를 식별하고 분류함으로써 세상을 이해한다. 아기랑 막대기 실험으로 증명됨ㅋㅋ 상태와 프로퍼티 모든 객체의 상태는 단순한 값과 객체이ㅡ 조합으로 표현할 수 있다. 상태를 구성하는 모든 특징을 통틀어 객체의 프로퍼티라고 한다. 객체의 프로퍼티는 단순한 값인 속성과 다른 객체를 가리키는 링크라는 두 가지 종류의 조합으로 표현할 수 있다. 상태 캡슐화 객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다. 객체가 외부에 노출하는 것은 행동뿐이며, 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동뿐이다. 동등성(Equality)과 동일성(Identical) 행동이 상태를 결정한다 초보자들은 먼저 객체에 필요한 상태가 무엇인지를 결정하고 그 상태에 필요한 행동을 결정한다..
-
RSA 암호화 알고리즘 작은 숫자로 쉽게 이해하기코딩은 주댕이로/컴공지식 2021. 9. 21. 22:19
두 소수 p, q가 있다. p와 q의 곱 N을 구하는 것은 매우 쉽다. 하지만 N이라는 값이 주어졌을 때, 소수인 p와 q를 구하는 것은 매우 어렵다. 이를 Trapdoor라고 부른다. Bob이 Alice에게 자신의 나이(42)를 보내는 시나리오를 생각해보자. Public key 생성 먼저 Alice가 Public Key를 생성해야 한다. p=17, q=29로 두 소수를 정했다. 두 수의 곱 N을 계산한다. p x q = N = 493 또 다른 수 e를 생성한다. (p-1) x (q-1) = 448 448이 e는 아니다. e는 448의 인수와 관련이 없다면 어떤 값이라도 될 수 있다. 448을 소인수분해하면 448 = 2 x 2 x 2 x 2 x 2 x 2 x 7이다. 즉, e를 소인수분해를 했을 때, ..
-
[Shell] IFS의 의미는 뭘까?코딩은 주댕이로 2021. 1. 27. 20:02
IFS = '\n'이 문장의 의미는 무엇일까? IFS는 internal field separator의 약자다. shell이 단어를 쪼갤 때 사용하는 문자를 의미한다.디폴트 값은 공백 문자다. (space, tab, new line) 아래 코드와 실행 결과를 보자.mystring="foo:bar baz rab"for word in $mystring; do echo "Word: $word"done 결과Word: foo:barWord: bazWord: rab 그러면 IFS를 :으로 설정해보자.IFS=':'mystring="foo:bar baz rab"for word in $mystring; do echo "Word: $word"done 결과Word: fooWord: bar baz rab 즉 IFS = '\n'..