배열과 ArrayList 차이 자바에서 배열은 C 언어와 마찬가지로 동일한 타입의 값을 연속하여 정해진 크기만큼 저장하는 자료구조다. 대신 C 언어와의 차이라면 자바 배열은 배열의 참조 선언과 실제 배열의 할당이 분리되어야 하며, 배열은 반드시 new를 통해 할당되어야 한다는 점이다. int nArray[] = new int[20]; String strArray[] = null; ... strArray = new String[maxStringCnt]; 배열의 문제점은 new로 할당된 크기를 벗어나서 배열에 값을 넣거나 접근하면 ArrayIndexOutOfBoundsException라는 예외가 나게 된다는 점이다. 즉 배열은 필요한 크기만큼 동적할당하는데, 한번 할당하면 그 크기를 넘어가게 사용할 수 없다..
이번 포스트에서는 객체의 클론과 깊은 복사, 얕은 복사에 대해 살펴본다. 클론은 같은 객체를 값을 복사하여 그대로 한 개 더 만드는 것이다. ArrayList 같은 객체는 두 변수가 같은 객체를 참조하는 경우(매개변수로 전달한 경우) 한 변수를 통해 객체 내부의 값을 바꾸면 다른 변수의 객체(같은 것이므로)도 바뀌게 된다. 이런 경우 우리는 바꾸기 이전 값을 저장하기 위해 클론을 통해 같은 객체를 한 개 더 만들어두는 경우가 많이 있다. 먼저 클론(clone)이 무엇인지 알아보자. 클론은 필드의 값이 같은 새로운 객체를 만드는 것이다. 그러면 객체가 하나 더 생기고 모든 필드가 원래 객체와 같은 값을 가지게 될 것이다. 이 때 값변수라면 값을 저장할 새로운 메모리가 객체 안에 생기고 새로운 객체에는 새로..
스트링 클래스를 얘기할 때 흔히 불변성에 대해 언급한 것을 많이 본다. Immutable을 불변성으로 번역하는데, 이것이 무엇을 의미하는지 이해하기가 쉽지는 않다. 간단하게 말해서 스트링 객체는 한번 만들어지면 그 안에 포함된 문자열의 값이 바뀌지 않는다. 생성될 때 정해진 문자열 데이터가 변할 수 없다는 뜻이다. 대표적인 예로 i번째 글자를 가져오는 charAt(i)라는 메소드는 있지만 i번째 글자를 수정할 수 있는 방법은 없다. 스트링에 들어있는 데이터를 일부라도 바꿀 수 있는 방법이 없다는 것이다. 그렇다면 + 연산이나 substring 메소드는 무엇인가? 일부를 바꾸는 replace 메소드는? 이런 메소드들은 스트링의 값을 변경시키는 것이 아니라 원래 객체는 그대로 두고 새로운 객체를 만들어서 돌..
프로그램을 좀 해본 사람이라면 System.out.printf를 많이 써 봤을 것이다. 자바의 printf는 C 언어의 printf에 뿌리를 두고 있어 프로그래머들에게 익숙한 개념이다. printf는 특히 숫자를 길이나 형식에 맞게 출력하는데 유용하다. 그런데 잘 모르고 있는 사람이 많지만 System.out.format이라는 메소드도 printf와 똑같은 기능을 제공한다. 그런데 자바에서는 이러한 포매팅의 개념이 스트링에서 출발하고 있다. String.format() 메소드가 System.out.printf나 System.out.format에서 사용되는 것과 같다. 그럼 이 format 메소드에 대해 좀더 자세히 알아보자. String.format(포매팅문자열, 인수, ...); 여기서 인수는 포매팅 ..
자바에서 스트링은 매우 중요하고 어려운 자료형이다. 이것은 C 언어에서도 마찬가지인데, 사실 자바의 스트링은 C 언어의 char*에 비해서는 매우 쉽고 편리하다. 그러나 메모리 관리를 하지 않으므로 효율성의 면에서 주의하지 않으면 성능에 심각한 문제를 가져올 수도 있다. 이 포스트에서는 스트링의 기본 개념과 연산에 대해서 살펴본다. 자바에서 스트링은 객체다. 객체라 함은 데이터를 내부적으로 가지고 있는 메모리 인스턴스이고 외부로 노출된 메소드에 의해서 접근할 수 있다는 뜻이다. 이러한 객체는 String 타입의 변수에 의해 참조된다. 프로그램 안에서 쓰이는 스트링 객체의 한 형태는 쌍따옴표로 표시되는 문자열을 스트링 리터럴(상수값)이라고 부른다. 스트링 리터럴도 하나의 스트링 객체여서 메모리 상에 저장되..
코드리뷰 시리즈 프로그래밍 스타일 - 들여쓰기와 스페이스 프로그래밍 스타일 - 이름 붙이기 코드 리뷰 ABC - if 문 줄이기 코드 리뷰 ABC - 반복문 코드 개선 (이글) 반복문은 프로그램에서 대부분의 실행시간을 차지하는 곳이고 코드의 복잡도가 가장 높아지는 곳이다. 그러므로 반복문 코드를 잘 짜는 것은 프로그래밍에서 가장 중요하고 핵심적인 역량이다. 코드리뷰는 실행 상의 오류를 찾는 과정이 아니다. 문제없이 잘 동작하는 것이 확인된 코드에서 좀더 보기좋게, 간결하고 분명하게 코드를 고칠 수 있는 부분이 있는지 찾는 과정이라고 할 수 있다. 반복문 작성에서 주의할 점은 1) 루프 변수가 반복에 따라 어떻게 바뀌는지 잘 보여야 한다. 2) 종료조건과 반복회수가 알아보기 쉽게 작성되어야 한다. 3) 가..
코드리뷰 시리즈 프로그래밍 스타일 - 들여쓰기와 스페이스 프로그래밍 스타일 - 이름 붙이기 코드 리뷰 ABC - if 문 줄이기 (이글) 코드 리뷰 ABC - 반복문 코드 개선 코드 리뷰는 개발자들이 서로의 코드를 보면서 의견을 나누고 내꺼 남의 꺼 구별없이 더 나은 코드가 될 수 있게 고쳐나가는 개발 과정의 한 단계다. 코드 리뷰를 통해 사소한 스타일 규칙부터 if 문이나 for 루프를 작성하는 방식, 메소드를 만드는 방식, 매개변수나 반환형의 타입 등 모든 부분에 대해 토론하고 서로 자기의 의견을 제시하고 더 나은 것을 수용하면서 코드를 더 좋게 만들게 된다. 이 때 프로그램이 올바로 동작하는 것은 당연한 전제조건이고 실행이나 논리상의 오류가 있다면 프로의 세계에서는 망신을 당하게 된다. 수준높은 개..
앞에서 equals 메소드의 오버라이딩으로 비교와 검색을 할 수 있음을 보았다. 그런데 두 객체에 대한 비교가 같다/같지않다로 할 수도 있지만 정렬을 하고 싶다면 크다, 같다, 작다의 세 가지 경우를 구분할 수 있어야 한다. C의 strcmp가 이러한 비교 함수의 원조다. strcmp는 두 char* 포인터를 받아서 앞의 것이 작으면 -1, 같으면 0, 크면 1을 돌려준다. 반환형은 int다. 자바에서 이런 비교를 해주는 메소드가 compareTo다. compareTo는 많은 라이브러리 클래스에 이미 구현되어 있는데, 대표적인 예로 역시 String 클래스를 살펴보자. String str1 = scan.next(); String max = str1; while (scan.hasNext()) { str1 ..
자바에서 클래스 객체를 사용하면서 접하게 되는 메소드로 toString이 있다. 이것도 앞에서 살펴본 equals 처럼 Object 클래스에 정의되어있는 것을 오버라이드하는 메소드다. toString()의 역할을 이해하기 위해서는 먼저 자바에서 변수나 값의 타입변환 규칙을 살펴보아야 한다. 프로그램은 데이터를 읽어서 그것을 int, float, String 등의 타입으로 메모리에 저장한다. 그런데 프로그램에서 +나 == 같은 연산을 수행할 때는 두 피연산자를 같은 타입으로 만들어서 계산해야 한다. 다음 예는 이러한 타입변환이 자동으로 일어나는 예를 보여준다. int n = 10; double a = n; // n을 double으로 변환하여 a에 지정 long b = n; // n을 long으로 변환하여 ..
자바를 처음 배울 때 어려운 개념 중 하나가 변수의 참조다. 참조는 어떤 객체를 가리키는 값인데 C의 포인터와는 좀 다르지만 비슷하게 이해할 수 있다. 객체를 가지고 프로그램을 만들어야 하는 것이 자바이므로 참조는 자바에서는 가장 근본이 되는 개념이다.이것은 프로그래밍 언어의 개념에서 값과 참조의 구분에 해당한다. 자바 언어에서 변수는 기본 타입(int, short, long, byte, float, double, char, boolean 8개)은 값 변수, 객체 타입(또는 복합타입이라고도 함)은 참조 변수다. 값 변수는 자체로 메모리와 값을 가진다. 참조 변수는 어딘가에 저장되어 있는 객체를 가리킨다(참조만 가짐). 참조 변수는 일반적으로 선언할 때 null로 초기화하고 필요할 때 new Student..
- Total
- Today
- Yesterday
- TypeError
- follow
- 지연계산
- contains
- Lazy evaluation
- contentEquals
- 스트링
- Iterator
- 콜렉션
- comparable
- format
- python exercise
- 패턴
- sort key
- typedef
- ToString
- C++ 클래스
- max
- 스트링 +
- rust
- zip
- 이터레이터
- Camel Style
- 동적바인딩
- python example
- 자바regex
- APPEND
- CompareTo
- 이터러블
- indexof
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |