스레드를 다룰 때 까다로운 것 중 하나는 lock이 대체 의도치 않게 어디에 걸렸지? 일 겁니다. 링크에서도 다루고 있으니, 한 번 정도는 읽어보셔도 도움이 많이 되실 듯 싶습니다. 먼저, 예제 프로그램 1을 보겠습니다. worker1과 worker2는 간단한 일을 합니다. 5초동안 sleep을 하고 끝냅니다. 그리고, 5번째 줄과 15번째 줄에, na가 가리키고 있는 객체에 lock을 겁니다. 즉, lock을 거는 대상은, Worker1의 na가 가리키는 Object, Worker2의 na가 가리키는 Object입니다. 다음에 Main 클래스는 그냥 Worker1과 Worker2를 돌리고, 끝날 때 까지 기다린 다음에, 프로그램이 끝날 때 까지 걸린 시간을 측정합니다. 이게 다입니다. 위 프로그램의 실..
Java 검색 결과
System의 arrayCopy는 생각보다 레퍼런스 내에서 상당히 많이 보이는 메서드입니다. 배열을 복사하는 것은 상당히 많이 쓰이기 때문입니다. 이것이 어떤 함수인지 간단하게만 언급하도록 하겠습니다. 분석까지는 하지 않겠습니다. 먼저, src는 source를 의미합니다. 원본이 들어있는 배열과, 복사를 시작할 위치를 받습니다. 그리고, 복사된 값을 넣을 배열과, 넣기 시작할 위치를 받습니다. 그리고 얼마나 넣을 것인지를 받습니다. 여기까지만 보면 도무지 무슨 이야기인지 잘 모르겠어요. 예제를 보도록 하겠습니다. 예를 들어서, 1번째 인자가 arr, 2번째 인자가 0, 3번째 인자가 brr, 4번째 인자가 10, 5번째 인자가 10이라고 해 보겠습니다. 이 경우에는, 배열 arr의 0번째 원소부터 x개를..
Java는 utf16으로 데이터를 저장한다는 이야기는 많이 들어보았을 듯 싶습니다. 이모지는 2byte로 커버가 되지 않을 텐데 어떻게 저장할까요? 2개의 쌍을 가진 서러게이트로 나누어서 저장합니다. Java 시간에도 잠깐 언급을 했었는데, 그리고 sql을 할 때도 언급을 한 거 같은데, 또 언급하는 이유는 그만큼 중요하기 때문입니다. 몇 메소드에 대해서 더 알아가실 겸. 겸사 겸사. 예를 들어, 강아지 이모티콘은 16진수로, 0x1F415입니다. 이는 2byte의 한계인 0xFFFF보다는 큰 수입니다. Character의 toChars는 codepoint 값을 받아서, 이것을 char형 배열로 리턴해 주는 함수입니다. 이는 Unicode의 코드값을 의미합니다. 예를 들어, '가'는 0xAC00이니까, ..
Collection 중에는, SynchronizedMap이 있습니다. 대충 Synchronizedxxx라고 해 보겠습니다. 이것들은 어떠한 구조로 되어 있을까요? 먼저 Collcetions.Synchronizedxxx로 호출하는 것을 보아서는, 내부 class로 선언이 되어 있는 것을 알 수 있습니다. 이들은, Map 꼴의 맵 객체와, Object 객체인 mutex를 가지고 있습니다. 생성자 안에는, 인자로 넘겨받은 Map을 대입하는 부분이 있습니다. HashMap도 있고, TreeMap도 있을 텐데. 이렇게 해도 문제가 없나요? 고양이는 동물이고, 개도 동물이잖아요. 그러니 이들을 동물이라고 하는 것은 크게 무리는 없습니다. 다만, 넘겨받은 객체를 가지고 bark를 호출할 때에는 이야기가 달라지는데요...
Interface는 많이 들어보셨을 겁니다. 왜 쓰는 것일까요? 에 대한 질문에 대한 답은 어느 정도 하실 거라고 생각합니다. 그렇지만, 이게 쉽게 잘 와 닿는 개념은 아닐 거라 생각합니다. ps에서 많이 발생할 만한 상황을 예로 들어보겠습니다. Java에서 Comparable은 interface로 선언이 되어 있습니다. 그리고 이 인터페이스 안에는 Target과 매개변수를 비교하는 compareTo가 정의되어 있습니다. 이것은 실체는 없는 메소드로 정의가 되었습니다. '비교 가능한 기능을' 구현한 Obj입니다. 그런데, 잘 보면, 그냥 Obj는 생성자만 있을 뿐, 그 어디에도, 눈을 씻고 찾아봐도 비교를 하는 메서드가 없음을 알 수 있어요. 비교 가능 함수를 구현해 보겠습니다. compare 가능한 함..
최근댓글