오랫만에 스레드 포스팅을 올립니다. Java에는, synchronized 키워드가 있는데요. 이것은 특정한 대상에 lock을 걸어서, lock이 풀릴 때 까지 다른 쓰레드가 실행을 하지 못하게 합니다. static 메소드에 붙일 때와, 일반 메소드에 붙일 때, 어디에 락을 거는지가 다른데요. 그에 대해서 간단하게 짚고 넘어가 보도록 하겠습니다. 먼저, 일반 메소드에 synchronized를 붙였습니다. 그러면 어떻게 락을 걸까요? 간단하게 프로그램을 만들어서 실험해 봅시다. 예제 1번입니다. 먼저 코드부터 보여드리겠습니다. 먼저 foo와 bar는, static 메서드가 아니지만, synchronized가 붙어있습니다. 이들을 동기화 메소드라고 이야기 합시다. 그리고 Thread를 상속받은 worker와 ..
Java 검색 결과
String의 indexOf는 어떤 식으로 동작할까요? indexOf를 호출하면, 내부에서, 인자를 7개를 받는 함수가 호출이 되는데요. 1번째 source는 어떠한 문자열에서 찾을 것인지, target은 패턴을 의미합니다. 예를 들어서, "abababb"에서 "ab"를 찾는다고 한다면, "abababb"는 source가 되고, target은 "ab"가 됩니다. fromIndex는, string의 어느 위치부터 탐색을 할 것인지에 대한 정보를 담고 있는데요. 예를 들어서 string이 "abcde"라고 하고, 1번째 위치부터 탐색한다면 fromIndex는 1이 됩니다. 아래 코드들을 봅시다. 뭔가 조금 복잡해 보이는데요. fromindex가, string에서 어느 위치부터 탐색을 시작할 것인지를 나타냅니..
Java에서 구분자를 기준으로 문자열을 자르는 방법은 몇 가지가 있습니다. 이 중, StringTokenizer를 간단하게 알아보도록 하겠습니다. 그 전에, token이랑, 구분자에 대해서 간단하게 짚고 넘어갑시다. 먼저 "a,ha,d"라는 문자열이 있습니다. 저는 ,를 기준으로 분리를 해 보겠습니다. 이 때, ,를 구분자라고 이야기를 합니다. 문자열을 ,를 기준으로 나눈 셈인데요. 구분자를 보라색으로 표시해 보겠습니다. 그러면 그것에 의해서 "a,ha,d"가 "a", "ha", "d"로 분리가 됩니다. 이러한 것들을 각각 토큰이라고 이야기를 합니다. 만약에 구분자가 ','와 ' '인 경우, 요런 식으로 쪼개질 수 있어요. "a", "a", "d". 아니면 "a"와 "", "a", "d" 순서로 쪼개지거..
오늘은 간단하게 Wrapper 클래스에 대해서 알아봅시다. 우리는 기본 타입을 어떠한 이유로 Wrapping을 해야 하는 경우가 생기는데요. 예를 들자면, ArrayList에 값을 집어넣을 때 기본 타입을 넣을 수 없어요. 그러면 wrapping 해서 넣어야 합니다. 이것을 Boxing이라고 합니다. 반대로, Integer 타입을 int로, 그러니까 값을 얻어낼 수가 있는데요. 이를 언박싱이라고 합니다. 요것을 그림으로 도식화 시키면 아래와 같습니다. 보시면 박스 안에 real Value가 들어가 있음을 알 수 있어요. 초록색으로 칠한 상자는 Integer 객체인데요. 이 안에, 5000이라는 실제 값이 들어가 있음을 알 수 있어요. 먼저, 기본값을 boxing 해 봅시다. 먼저 생성자를 이용한 방법이 ..
class 안에는 여러 가지 필드들이 있습니다. 그 중에 static이 붙은 것도 있고, 아닌 것도 있을 겁니다. 클래스 안에 static으로 선언된 것들을 Java에서는 클래스 변수라고 이야기를 합니다. 설계자 분들이 요 키워드를 대체 어떤 기준으로 붙였을까요? 예제 프로그램을 봅시다. My_Obj에는 2개의 필드가 있습니다. 하나는 iv, 다른 하나는 cv입니다. 먼저 My_Obj 객체 a를 생성합니다. 그리고 a.iv에 2를, a.cv에 1을 넣습니다. 그 다음에 a의 필드 값들을 출력하고 있어요. 다음에, b를 생성하고 b.iv와 b.cv에 각각 5, 5를 넣고 b의 필드 값들을 출력하고 있습니다. 그 다음에 다시, a의 필드 값들을 print 하고 있어요. 그러면 출력 결과가 어떻게 나올까요? ..
최근댓글