java 강의에서 == 연산자에 대해, 이 글에서 언급을 했었습니다. 그런데, 질문을 받고 답변을 하다 보니, 헷갈리는 점이 있었습니다. 객체에서 다른 객체를 참조하는데 a == b인 경우가 있을까? 사실, 이에 대한 답은 문서에 있습니다. Object 클래스에 있는 equals 메서드에 나와 있는데요. 다른 부분은 없고, 초록색 부분과 노란색 부분만 읽어보시면 됩니다. x와 y가 같은 오브젝트를 참조한다를 명제 Q, Object 클래스의 equals 메소드가 true를 리턴한다를 명제 P라 합시다. if and only if는 필요 충분 조건을 나타냅니다. 즉, 저 메소드가 참 값을 리턴했다는 것은, x와 y가 같은 객체를 참조했다는 것입니다. 이런 경우에만 참이 된다는 소리입니다. x == y인데 다..
Java 검색 결과
java에서 computeifabsent랑, computeifpresent는 꽤 유용하게 쓸 수 있는 Map 메소드입니다. 이 중에서, 저는 후자를 위주로 설명하도록 하겠습니다. 먼저, computeifpresent 메서드에 대한 설명을 보겠습니다. 어려울 것은 없고요. key와 Bifunction을 받습니다. key가 이미 있는 경우에는, key와 value를 가지고 새롭게 mapping하는 것을 시도하는 함수입니다. 그런데 이 설명만 보아서는 어떤 일을 하는 지 알기가 쉽지 않아 보입니다. 예제를 작성해 보겠습니다. 먼저, 3가지 연산을 한 후에, map에 있는 내용을 출력하게끔 하였습니다. 결과를 보고 이야기 해 보겠습니다. 먼저, 처음에 맵은 비어 있었을 겁니다. 2를 추가하려고 하니 없었으므로,..
java에서 예외와 에러의 차이가 무엇일까요? 공식 문서는 단 2개의 키워드로 답을 주고 있습니다. abnormal, serious, shouldn't not try catch. 각각, 비정상, 심각한, catch를 하지 말아야 하는을 의미합니다. 여기에 속한 대표적인 것들 중에서는, OOME와 stackoverflowError가 있습니다. 왜 이 둘이 예외가 아닌 에러인 건지 문득 궁금해 졌습니다. 위 프로그램을 보면, f라는 메서드가 계속 재귀 호출이 되고 있음을 알 수 있습니다. 실제로 이 프로그램은 아래와 같은 에러를 떨굽니다. StackOverflowError. 이것은 재귀 함수가 종료 조건 없이 계속 타고 들어갈 때 발생할 수 있습니다. 이 예외를 타고 들어가면, VirtualMachineEr..
java에서 어떻게 Priority Queue를 쓸까요? 예제로 간단하게 알아보도록 하겠습니다. 먼저, 기본적으로 Comparable이 구현이 되어 있는 경우에는, 따로 compareTo를 정의하지 않아도, 알아서 우선순위가 높은 것 부터 빠져나옴을 알 수 있어요. 예를 들자면 String 클래스의 경우에는 다음과 같이 선언이 되어 있습니다. 여기서 중요한 것은 Comparable입니다. 비교 가능하다는 것입니다. 그러면 내부에 compareTo가 정의가 되어 있을 겁니다. 보니까 정의가 되어 있네요. 예제 프로그램 1을 봅시다. 보통 pq를 구현할 때, 이런 식으로 많이 구현합니다. pq가 비었는지 확인하기 위해서, isEmpty를 호출합니다. 그리고, 맨 위에 있는 원소를 꺼내기 위해서 poll 메서..
예전에 네이버 블로그를 운영했을 때, 이 글에서 compare 메서드에 대해서 언급했던 적이 있었습니다. 이것에 대해서 혼동되게 설명한 것도 있고, 잘못 설명한 것도 있어서 다시 짚고 넘어가겠습니다. 먼저, Comparable interface에 정의된 CompareTo 메서드에 대한 설명입니다. 특정 object를 ordering을 위해서 비교한다고 되어 있습니다. 우선 순위가 높다. 낮다 보다는, 순서를 매기기 위해서 이 메서드를 호출한다고 보는 것이 적절해 보입니다. 그리고 리턴 부분을 보면, -1, 0, 1이 아닌 단순히 음수, 0, 양수를 리턴한다고 되어 있습니다. -1을 리턴하는 것과 음수를 리턴하는 것은 의미상 차이가 분명히 있는 부분입니다. 아래 예제 프로그램을 보시면 명확하게 다가옵니다...
최근댓글