java String의 startsWith 메서드는, str이 prefix로 시작하는지를 검사하는 함수입니다. 2번째 인자에 offset을 넣을 수도 있는데요. 이는 str의 offset부터 끝까지는 부분 문자열 sub로 잡았을 때, sub가 prefix로 시작하는지를 검사합니다. 그러면, endsWith도 내부적으로는 startsWith를 쓰겠네요. 쓰는 방법은 아래와 같습니다. boolean startsWith(String prefix); boolean startsWith(String prefix, int offset); 보통 위에 것을 꽤 쓰는 편입니다. 그러면 이들이 어떻게 동작하는지 내부를 간단히 보아야 겠군요. 먼저 String 인자만 하나 넘겨주면 그림에서의 1433번째 줄에 들어갑니다. 그..
Java 검색 결과
String에는 getBytes 메서드가 있습니다. 이것이 대체 무엇을 하는 함수일까요? 간단하게 말해서, 어떠한 문자열을 aaa 라는 형식으로 인코딩 해서, 그 결과를 byte 배열로 리턴하는 함수입니다. 그런데, getBytes에 아무런 인자도 넣지 않고 호출하는 경우가 있는데요. 이 경우에 어떻게 동작하는지 간단하게 먼저 봅시다. 상세한 부분은 레퍼런스 분석에서 이야기 하도록 하겠습니다. F5로 호출되는 함수들을 간단하게 봅시다. 먼저, 이 함수 안에 들어가면 StringCoding 클래스의 encode 메소드를 호출합니다. 그러면, 우리는 이런 합리적인 의심이 가능합니다. 이거 encode 하는 함수 아니야? 네. 맞습니다. xxx 라는 형식으로 인코딩 하라는 이야기입니다. 이 함수 내부로 들어가..
Java의 char형은 어떻게 표현이 될까요? Character 클래스에 BYTES 라는 필드가 있는데요. 이 값은 char형 변수가 바이트를 얼마나 쓰는지 나타냅니다. 이 값을 출력해 봅시다. 2가 나와요. 기본적으로 16bit 유니코드 인코딩을 쓰고 있다는 건데요. 이제 이 친구가 어떤 식으로 값을 저장하는지 알아보도록 하겠습니다. '가'라는 문자를 집어 넣어보겠습니다. '가'는 유니코드로 U+AC00에 맵핑이 됩니다. 그러면, ch를 int형으로 변환하여 출력하면, 유니코드가 어떠한 형식으로 디코딩 된 결과를 출력할 겁니다. Integer 클래스 안에 있는 toHexString은 16진수의 문자열로 출력해주는 함수입니다. 봤더니 16진수로 ac00으로 출력이 되었어요. 이 값은 0000에서 ffff..
오늘은 Java에서 쓰레드를 생성하고 실행하는 방법에 대해서만 알아보도록 하겠습니다. Runnable을 매개값으로 하는 Thread 생성자를 호출하거나, 아니면 worker가 Thread를 상속하는 방법 2가지가 있는데요. 이 둘을 먼저 알아보도록 하겠습니다. 코드를 컴파일 하고 실행을 합니다. static void main(String args[]); 이 친구가 있는데요. 이 친구를 실행하고 종료하는 쓰레드를 메인 쓰레드라고 합니다. 그런데, worker를 하나 더 만들 수 있어요. 즉, Main 실행 흐름만 만드는 것이 아니라, 다른 역할을 하는 스레드 또한 만들 수 있는데요. 예를 들어서, Main에서 게임의 전체적인 알고리즘 같은 것을 수행한다면, Worker에서 배경 음악을 재생한다던지. 그런 ..
Java에는 StringBuilder와 StringBuffer가 있습니다. 이들은 어떻게 구현이 되어 있길래 append 연산을 하는데, String보다 압도적으로 빠를까요? 사실, 이 두 클래스에는 메서드 2개가 공통적으로 있다는 것을 보실 수 있습니다. 그 중에서, capacity는 눈에 띄는 함수입니다. 이것은 실제로 StringBuilder와 StringBuffer가 얼마만큼의 문자를 넣을 수 있는지 리턴해 주는 메서드인데요. 동적 배열로 따지면, 실제 배열에 할당된 크기를 의미합니다. 그러면 size와 String의 무엇과 대응이 될까요? 당연하게도 length일 거에요. 실제로 저거랑 size가 쌍으로 붙어 있다면 십중 팔구 동적 배열이다. 라고 생각하셔도 무난합니다. 저는 이 두 메서드를 가..
최근댓글