Java에서 배열은 어떻게 쓸까요? C언어에서의 배열과 똑같습니다. 다만, 자바에서는 배열이 실제로 객체이기 때문에, Heap 영역에 생성이 된다는 것 정도의 차이밖에 없어요. 그리고 크기가 고정되어요. 즉, 고정 힙 배열, fixed heap array 정도로 생각하면 좋겠습니다. 예제 프로그램 1을 봅시다. 일단, 우리는, 크기가 2인 int형 배열 arr을 선언하려고 합니다. 그러면, int arr[] = new int[2]; 이렇게 선언할 수 있어요. int형을 저장할 수 있는 2개의 공간을 할당한다는 건데요. 일단 6번째 줄까지 수행이 되면, 메모리에 다음과 같이 저장이 됩니다. arr이 int형을 2개 저장할 수 있는 공간을 가리키고 있어요. arr은 스택에, 실제로 real int를 2개 저..
Java 검색 결과
이런 질문을 많이 받았습니다. String a와 String b가 있다면, a == b는 false이지 않나요? 사실 참조 타입에서 == 연산자는 가리키는 객체가 다르면 false를 리턴합니다. 그런데, 이 친구는 희안하게도, pool이 있습니다. 그리고 이상하게 생겨먹은 함수인 intern() 메서드가 있는데요. 자바에서 문자열을 선언했을 때, 어떤 식으로 동작하는지 이해하기 위해서는 저 둘에 대한 이해를 하시는 것이 중요합니다. 먼저 6번째 줄과 7번째 줄을 보면 "str" 이런 식으로 뭔가 되어 있는 것을 볼 수 있는데요. 상수인가요? 문자열 상수는 우리는 흔히 리터럴이라고 부릅니다. 디버그 포인트를 찍어 보겠습니다. 그러면 original에 "str"이라는 리터럴이 넘어오게 됩니다. arg0을 보..
쓰레드를 이야기 하다 보면 병렬성과, 동시성이라는 용어가 자주 나옵니다. 이 말은 무엇을 의미할까요? 그 전에, 우리는 쓰레드의 상태를 이해할 필요가 있습니다. 오늘은 그에 대해서 간단하게 이야기 해 보도록 하겠습니다. 먼저, w[i] = new worker(); 문을 봅시다. 그러면, Thread를 상속받은 worker 객체가 생성이 됩니다. 그러면 worker-x는 생성이 되고, 아직 start()가 호출이 되지 않았어요. 이를 new 상태라고 이야기 합니다. 그 다음에 우리는 start() 메소드를 호출했습니다. t.start()를 호출하면, Thread를 상속받은 worker 클래스 내부의 run 메소드가 호출이 될 겁니다. 그러면, 실행 대기 상태가 됩니다. 즉, 스케쥴러에 의해서 선택이 될 수..
java에서 Queue는 어떻게 사용할까요? 저번 시간에 리스트를 잘 보셨다면, 대략적으로 감이 오실 거에요. 아. 이건 빼박 리스트구나. 사실 동적 배열을 이용해도 되는데요. 이것은 잘 생각해 보세요. 예제 프로그램을 봅시다. 일단 저는 my_Object 객체를 Queue에 넣을 거에요. 이건 아마 딱 봐도, 미로 찾기나, 어느 지점에서부터 최단 거리를 구할 때 쓰는 것 같군요. 이제 main 함수를 볼까요? 16번째 줄이 보이시나요? 저는 LinkedList를 쓸 거에요. LinkedList는 deque를, deque는 queue를 implements를 한 관계입니다. 이것은 Collections 시간에 다시 정리해 봅시다. 일단 오늘은, 아 이런 게 있구나. 정도만 보시면 되겠습니다. 사실 큐의 특..
자바에는 두 가지 타입이 있습니다. 기본 타입은 byte, char, short, int, long, float, double, boolean이 있어요. 참조 타입은 객체를 가리키는 변수인데요. 이들이 어떻게 다른지 예제 프로그램과 그림으로 설명해 보도록 하겠습니다. 문제의 예제 프로그램입니다. 7번째 줄까지 수행이 되면, 메모리에 다음과 같이 올라갑니다. n과 m은 기본형으로 선언된, 변수들입니다. 즉, 실제 값을 저장하고 있습니다. 8번째 줄에 2차원 배열인 arr을 선언했는데요. 이는 기본형이 아닙니다. 즉 참조형이라는 이야기인데요. 이것은 실값을 저장하지 않습니다. 참조값을 저장해 놓습니다. 그러면 arr은 실값을 저장해 놓았나요? 아닙니다. 객체를 참조하는 어떠한 값을 저장해 놓습니다. 이것이 ..
최근댓글