java의 bit 연산자 중에 >>와 >>> 연산자가 있습니다. 이 둘의 차이에 대해 간단하게 알아보겠습니다. 먼저, 위에 2개는 -2 >> 1과 -2 >>> 1의 값을 출력합니다. 아래 2개는 2 >> 1과 2 >>> 1을 출력합니다. 출력 결과를 봅시다. -1, 2147483647이 나오고, 밑에 2개는 1, 1이 나옵니다. 이게 어떻게 된 것일까요? 먼저 -2의 2의 보수 표현법으로 표기해 봅시다. 2를 2진법으로 표현하면 위 그림과 같습니다. 여기서 비트가 0인 것은 1로 바꾸고, 1인 것은 0으로 바꿔보겠습니다. 그러면 1...1101이 됩니다. 여기서 1을 더해보겠습니다. 그러면 11..110이 됩니다. 여기에서, 부호를 결정하는 비트는 1로 표시했습니다. t가 -2인 경우, 표현 방식은 위와..
코딩/Java 검색 결과
java에는 equals랑 compareTo가 있습니다. 이 둘을 언제 쓰는지, 차이점을 간단하게 알아보겠습니다. 먼저 compareTo는 비교를 하기 위해 쓰입니다. 순서를 정하기 위해서. 뒤에 for order가 붙은 것을 보면 알 수 있습니다. 당연하게도, comparator의 compare도 같은 용도로 쓰입니다. Compares object for order. 위에서 말한 순서는 무엇일까요? 랭킹을 정한다고 생각해 봅시다. 이름과 점수로 이루어진 object가 있습니다. 우리는 점수별로 순서를 정하려고 합니다. Obj 클래스는 이 상황에서 학생에 대한 데이터를 저장할 거에요. score와 name이 있는데요. 각각 받은 점수와 이름을 저장하고 있습니다. compareTo는 아래와 같이 오버라이딩..
클린 코드 예외 처리 부분을 보다가 이런 문구를 보게 되었습니다. 정상 흐름을 정의해라. 처음에는 이 말이 무슨 뜻인지 잘 몰랐습니다. 곰곰히 생각해 보니, 이펙티브 자바에서도 비슷한 이야기가 있었는데요. 예외는 예외 상황에서만 사용하라는 것이였습니다. 아래 예제는 너무나도 유명한 예제일 겁니다. 먼저, 길이가 5인 ArrayList를 생성합니다. 그리고 0부터 4까지 넣었습니다. 다음에, 9 ~ 12번째 줄에서, 리스트에 있는 모든 원소를 순회하게 됩니다. 그리고 foo 메서드를 실행합니다. for loop를 도는데, OutOfBound 에러가 뜨는 경우에, 에러 로그를 남기고 종료합니다. foo 메서드를 봅시다. 이 메서드는 0 이상 6 미만의 정수를 뽑습니다. 0, 1, 2, 3, 4, 5를 뽑는다..
안녕하세요. 666번째 글입니다. 이번 시간에는 reflection을 이용해서 field value를 set하는 코드만 간략하게 보겠습니다. 먼저, data 클래스의 코드는 요렇습니다. private field로 선언된 x, y, 그리고 hm이 있네요. 당연하게도, hashCode와 equals, 그리고 toString은 오버라이딩 되어 있습니다. 우리는 먼저, 이름으로 Field에 대한 정보를 얻어온 다음에, 10번째 줄에서 set 메서드를 이용해서, 객체 d의 hm 필드의 값을 {"a":"b", "c":"d"}로 바꿀 것인데요. NoSuchFieldException이 뜹니다. 왜 그런지 메서드 설명을 봐야 겠어요. 먼저, 이 친구는 public member인 field member를 리턴합니다. Da..
저번 시간에 transient를 보다가, 잠깐 reflection에 대해서 언급했었는데요. 아마 언급을 하지 않았더라도, 클래스의 메타 데이터에 대한 정보를 얻어온다. 라는 것은 언급했을 듯 합니다. 내부를 보실 때, 이해하셨다면 좋았을 법한 로직만 간단하게 소개해 볼게요. 먼저, 객체를 직렬화 하기 위해서, 필드와 필드에 셋팅된 값이 어떤 값이였는지 알아야 했습니다. 그러한 정보들을 얻어와서 직렬화를 시킨다고 했어요. 그런데, transient 같은 키워드가 앞에 붙어있으면 직렬화를 하지 말아야 함을 의미해요. 즉, 필드 중에서 직렬화를 하지 말아야 하는 키워드가 앞에 붙어있는지도 알아내야 합니다. 즉, 객체에 대한 정보를 얻어올 때, 이 필드가 직렬화가 가능한 친구인지, 할당된 값은 무엇인지. 필드 ..
최근댓글