전체 글

전체 글

    [클린 코드] 객체와 자료구조(3)

    디미터 법칙 디미터 법칙은 모듈은 자신이 조작하는 객체의 속내용을 몰라야 한다는 법칙이다. 앞의 포스팅에서 봤듯이, 객체는 자료를 숨기고 함수를 공개한다. 즉, 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 의미이다. 좀 더 정확히 표현하면 디미터 법칙은 클래스 C의 메소드메서드 f는 다음과 같은 객체의 메소드만 호출해야 한다. 다음 코드는 디미터 법칙을 어기는 듯이 보인다. getOptions() 함수가 반환하는 객체의 getScratchDir() 함수를 호출한 후 getScratchDir() 함수가 반환하는 객체의 getAbsolutePath() 함수를 호출하기 때문이다. final String outputDir = ctxt.getOptions().getScratchDir().getAbsolut..

    [클린 코드] 객체와 자료구조(2)

    자료/객체 비대칭 객체는 추상화 후로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. 위 두 정의는 본질적으로 상반된다. 사소한 차이일지라도 그 차이가 미치는 영향은 매우 크다. 아래 코드를 보면 Geometry 클래스는 세 가지 도형 클래스를 다룬다. 각 도형 클래스가 간단한 자료구조이고, 아무런 메소드도 제공하지 않는다. 다만 도형이 동작하는 방식은 Geometry 클래스에서 정의한다. public class Square{ public Point topLeft; public double side; } public class Rectangle{ public Point topLeft; public double height; public ..

    유클리드 호제법

    2개의 자연수의 최대공약수를 구하는 알고리즘 정리 1. 자연수 m과 n이 주어진다 (m > n) 2. n이 0일 경우 m을 출력하고 종료한다. 3. m이 n으로 나누어 떨어질 경우 n을 출력하고 종료한다. 4. 그렇지 않을 경우 m을 n으로 나누고 나머지를 m에 대입 후 m과 n을 바꾸고 3번을 실행한다. 프로그래머스의 '멀쩡한 사각형'을 풀기 위한 선수 지식이다.

    [Kotlin] 코틀린의 시퀀스(Sequence)

    코틀린 표준 라이브러리에는 container type인 시퀀스가 있다. 이 시퀀스는 Iterable object에 사용할 수 있다. 기존의 Iterable이 전체 collection에 대해 정의된 순서대로 확장 함수들을 완료하고 다음 단계로 넘어갔다면 시퀀스는 각각 하나의 엘리먼트가 확장함수들을 수행하고 다음 단계로 넘어간다. 물론 크기가 매우 작은 Iterable일 때는 상관없겠지만, 반대로 매우 클 경우에 발생할 수 있는 오버헤드를 해결할 수 있는 유용한 방법이다. 그러므로 상황에 따라 시퀀스를 쓸지 그냥 Iterable 그대로 쓸지 잘 생각해봐야 한다. 일반적인 Iterable이 체인되어 있는 확장 함수들에서 어떻게 동작하는지 확인해보자. val maxEvenSquare = listOf(1, 2, ..

    [프로그래머스/Kotlin] 2016년

    문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한 사항 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 입출력 예 a b result 5 24 "TUE" 풀이 class Solution { fun solution(a: Int, b: Int): String = Calendar.g..

    [프로그래머스/Kotlin] 두 개 뽑아서 더하기

    문제 설명 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 사항 numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다. 입출력 예 numbers result [2,1,3,4,1] [2,3,4,5,6,7] [5,0,2,7] [2,5,7,9,12] 입출력 예 설명 입출력 예 #1 2 = 1 + 1입니다. (1이 numbers에 두 개 있습니다.) 3 = 2 + 1 입니다. 4 = 1 + 3입니다. 5 = 1 + 4 = 2 + 3입니다. 6 = 2 + 4입니다. 7 = 3 + 4입니다. ..