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개 저..
코딩 검색 결과
이런 질문을 많이 받았습니다. String a와 String b가 있다면, a == b는 false이지 않나요? 사실 참조 타입에서 == 연산자는 가리키는 객체가 다르면 false를 리턴합니다. 그런데, 이 친구는 희안하게도, pool이 있습니다. 그리고 이상하게 생겨먹은 함수인 intern() 메서드가 있는데요. 자바에서 문자열을 선언했을 때, 어떤 식으로 동작하는지 이해하기 위해서는 저 둘에 대한 이해를 하시는 것이 중요합니다. 먼저 6번째 줄과 7번째 줄을 보면 "str" 이런 식으로 뭔가 되어 있는 것을 볼 수 있는데요. 상수인가요? 문자열 상수는 우리는 흔히 리터럴이라고 부릅니다. 디버그 포인트를 찍어 보겠습니다. 그러면 original에 "str"이라는 리터럴이 넘어오게 됩니다. arg0을 보..
저번에 부동 소수점에 대한 이야기를 했었습니다. 그러면 C언어에서 double과 float의 차이는 무엇일까요? 정밀도 차이입니다. 그리고 오차 범위도 차이가 날 수 밖에 없는데요. 저는 이 두 가지를 중점적으로 보도록 하겠습니다. 일단, 부동 소수점 같은 경우, 소수부가 2^q꼴 실수인 것들만 표현할 수 있어요. 예를 들어 0.5, 1.625와 같은 것들이 그러한 예입니다. [관련글] 왜 0.1을 저장하면 오차가 생길까요? 이번에는 오차에 대해서 간략하게 짚고 넘어가 보도록 하겠습니다. 먼저 float형, 그러니까 단정밀도를 IEEE 754 형식으로 표현하면 아래와 같습니다. 이는 실수 z가 (1.xxx)와 2^(yyy-bias)의 곱으로 표현이 될 때, 저래 들어간다는 겁니다. 단정밀도는 이 bias..
인코딩에 대한 이야기 3편. 오늘은 EUC-KR과 CP949에 대해서 잠깐 이야기 해 보도록 하겠습니다. EUC는 아시아계 문자를 표현하기 위해서 개발을 한 코드 체계인데요. 뒤에 KR이 붙었으니까, 한국에서 쓰는 것입니다. 이것은 어떤 특징을 가질까요? 그 전에 KS X 1001이라는 체계가 있어요. 이것은 한국 산업 규격으로 지정된, 한국어 문자 집합 체계입니다. 0x30부터 0x48까지, 그러니까 제가 초록색으로 칠한 부분에 '가', '조', '힝'과 같은 완성형 한글 글자 마디가 속해 있어요. 그런데, 그렇게 문자가 많아보이지는 않습니다. 실제로 자주 쓰이는 2350자만, 가나다, 그러니까 사전 순으로 배열했는데요. 한글 문자 갯수가 11176개이니까, 나머지 8000여개는 없는 셈이 됩니다. E..
자바에는 두 가지 타입이 있습니다. 기본 타입은 byte, char, short, int, long, float, double, boolean이 있어요. 참조 타입은 객체를 가리키는 변수인데요. 이들이 어떻게 다른지 예제 프로그램과 그림으로 설명해 보도록 하겠습니다. 문제의 예제 프로그램입니다. 7번째 줄까지 수행이 되면, 메모리에 다음과 같이 올라갑니다. n과 m은 기본형으로 선언된, 변수들입니다. 즉, 실제 값을 저장하고 있습니다. 8번째 줄에 2차원 배열인 arr을 선언했는데요. 이는 기본형이 아닙니다. 즉 참조형이라는 이야기인데요. 이것은 실값을 저장하지 않습니다. 참조값을 저장해 놓습니다. 그러면 arr은 실값을 저장해 놓았나요? 아닙니다. 객체를 참조하는 어떠한 값을 저장해 놓습니다. 이것이 ..
최근댓글