참조 투명성 수학과 프로그래밍에서 모두 '함수'라는 말을 사용하고, 유사한 개념으로 사용됩니다. 하지만 둘의 결정적으로 다른 점이 있습니다. 수학에서의 함수는 같은 입력값이면 계산 된 결과는 항상 같습니다. 예를들어 f(x) = x*2 라는 함수가 있을 때, 같은 x 값을 넣게 되면 반환되는 f(x) 값은 항상 같습니다. 하지만 프로그래밍에서는 항상 같지 않습니다. int count = 0; int count(){ return count++; } 위와 같은 함수 count의 경우 매번 반환되는 값이 다르게 됩니다. final int x = 10; int getX(){ return x; } 반면 위와 같은 함수는 항상 같은 x의 값을 반환하게 됩니다. 이러한 경우를 '참조 투명'하다 라고 합니다. 앞서서 ..
Default Method 인터페이스는 기능에 대한 선언만 가능하기 때문에, 실제 코드를 구현한 로직은 포함될 수 없습니다. 하지만 자바8에서 이러한 룰을 깨트리는 기능이 나오게 되었는 데 그것이 Default Method(디펄트 메소드)입니다. 메소드 선언 시에 default를 명시하게 되면 인터페이스 내부에서도 로직이 포함된 메소드를 선언할 수 있습니다. (접근제어자에서 사용하는 default와 같은 키워드이지만, 접근제어자는 아무것도 명시하지 않은 접근 제어자를 default라고 하며 인터페이스의 default method는 'default'라는 키워드를 명시해야 합니다.) interface MyInterface { default void printHello() { System.out.println..
Best Time to Buy and Sell Stock ☞ 문제링크 입력값으로 주식(Stock)의 가격이 나오게 되고, 가장 큰 수익을 내게 되는 경우의 수익값을 반환해주면 됩니다. 예를 들어, 입력값이 7,1,5,3,6,4 인 경우 가격1에 사서 6에 파는 경우 수익이 가장 크게 나오게 됩니다. 7인 경우는 1의 과거이기 때문에 1 이후에 나온 값 중에서만 팔아야합니다. 문제풀이 (java) 순차적으로 읽어가며 가장 작은 값이 나온 경우 minPrice를 대체하고, minPrice와 현재 시장가의 차로 수익을 계산 합니다. 수익이 이전까지 계산된 수익보다 큰 경우 대체합니다. 만약 minPrice를 따로 구하지 않고 모든 경우를 계산 하게 되면 정답을 구할 수는 있으나 효율성이 크게 떨어지게 됩니다...
Forbidden Zero ☞ 문제 링크 입력받은 정수의 다음 숫자를 구하면 됩니다. 다만 숫자 중에 0이 포함되어 있으면 안됩니다. 예를들어 9의 다음 숫자는 0을 포함한 10이 아닌 11이 되어야 하고, 99의 다음 숫자는 100이 아닌 111이 되어야 합니다. 입력 값에 1을 더한 숫자를 구하고, 그 숫자의 0이 있으면 그 0을 1로 바꿔주는 방식으로 0이 없는 다음 숫자를 구할 수 있습니다. 저는 숫자를 char로 바꾸고, char를 하나씩 비교해가며 0인 char를 1로 바꿔주는 방법을 선택 했습니다. 반환할때는 다시 정수로 변환합니다. 풀이코드 (java) public class Main { public static void main(String[] args) { Scanner sc = new..
NullPointException 자바에서 Null이 들어 있는 데이터를 다룰 때, NullPointException을 발생시킬 가능성을 내포 하고 있어서 항상 주의해야 합니다. 아래 코드 처럼 null로 선언된 문자열(String) 값의 길이를 출력할 때 Exception이 발생합니다. public static void main(String[] args) { String str = null;//외부 입력값이 null로 들어 온 경우로 가정합니다. System.out.println(str.length()); } //실행결과 Exception in thread "main" java.lang.NullPointerException 만약 Exception을 발생시키지 않고 싶다면 아래와 같은 방어적 코딩을 필수..
프로그래머스 알고리즘 - 베스트 앨범☞ 프로그래머스 베스트 앨범 문제 링크 문제 설명과 제한사항을 빠짐없이 이해해야 실수 없이 코딩이 가능합니다. 장르(genre)를 먼저 나열 하는데 이에 기준이 장르의 속한 모든 노래들의 재생횟수(plays)입니다. 그러나 장르 내에서 노래를 정렬 할 때는, 많이 재생된 최상위 노래를 최대 2개까지 보여줍니다. 함정에 빠질 수도 있는 것이 최대2개입니다. 1개만 있을 경우 1개만 나와야하며, 노래들은 이름 없이 인덱스로 구분하게 됩니다. 문제풀이(java) 장르(genre)와 노래(song)에 해당 하는 클래스를 만들어서 해당 정보들을 기입하고, 내림차순 정렬시에 Collections.sort를 사용하는 방법을 선택했습니다. 클래스를 둘로 나누어서 풀어보니 한 장르의 ..
책 목차 정렬하기 DB상에 저장된 책의 목차들을 사용자에게 보여주기 위해서는 아래와 같은 조건이 있다.목차는 상위 목차를 한개 가질 수 있다.목차는 하위 목차를 여러개 가질 수 있다.위와 같은 조건만 있다면 답글이 달리는 '계층형 게시판'을 구현 할 때 사용 한 알고리즘이면 충분했다. 하지만 책 목차와 게시판의 결정적인 차이점은 게시판은 글간의 위치가 수정되는 경우가 거의 없지만, 책 목차를 관리하는 관리자 입장에서 순서가 변경 될 수 도 있기 때문이다. 예를들어 한 목차가 다른 목차와 순서를 바뀌게 되면 그의 하위 목차들도 모두 따라가야 한다. (대신 순서를 바꾸는건 같은 depth의 목차만 바꿀 수 있도록 한다.) 이를 해결하기 위한 방법으로 3가지가 고려 되었다. 공통적으로 목차가 어느 수준의 목차..
응집도? 객체 지향의 이상적인 설계를 위한 많은 원칙들을 한줄로 요약하면, "응집도는 높이고, 결합도는 낮춘다!" 입니다. 설계 부분은 이러한 개념적인 부분이 많아 경험이 수반 되지 않으면 초보개발자들이 완전히 이해하기 어려운 측면이 많이 있습니다. 특히 저는 응집도를 이해하기가 어려웠습니다. 응집도를 높이기 위해 연관된 사항들을 이것 저것 넣게 되면 SRP(단일 책임 원칙)에 크게 위반하게 될 것 같은데, 아이러니 하게도 응집도를 높이는것이 SRP(단일 책임 원칙)을 지키게 되는 지름길이라는 겁니다. 이러한 의문을 풀기위해서 먼저 응집도의 의미부터 정확하게 하기 위해서 찾아보았습니다. 하나의 프로그램을 구성하는 각각의 모듈이 그 고유의 기능을 잘 처리할 수 있는지를 나타내는 정도. - (한국정보통신기술..