끄적끄적

반응형

기초적인 자바 클래스

 

1. 문자열에 관련된 클래스들

 

자바에서는 문자열을 모두 String 클래스 타입의 객체로 표현

 

String

문자열을 다루는 관련 메소드. String은 문자열을 바꾸는게 아니라 새로운 String객체를 생성하므로 효율적이지 않다. 문자열의 저장에는 적합하지만, 문자열 조작에는 적합하지 않음. 문자열 조작을 할때마다 새로운 String객체가 메모리상에 쌓인다는 말이다. 자바가 아무리 gabage collecter라는 메모리 해제기능이 지원된다 하더라도 문제가 발생할 여지가 있다.

 

문자열의 길이를 가져오는 메소드   - length()

주어진 위치의 문자하나를 가져오는 메소드 – CharAt(int index)

 

String 클래스는 생성자를 사용하지 않아도 된다. 문자열을 리터럴로 입력하면 자동으로 만들어지기 때문.

 

리터럴이란?? – 소스코드상의 문자열. 메모리 한구석에 자리잡고 있어서 다수의 String객체 생성시 동일한 문자를 가리키고 있으면 다수의 String객체는 같은 공간을 참조하게 된다. 이럴때 같은 문자열을 ==과 같은 비교연산자를 사용하게 된다면

 

String str1 = “java”;

String str2= “java”;

는 같은 리터럴을 참조하기 때문에 str1 == str2는 true이지만.

 

String str1 = new String(“java”);

String str2 = new String(“java”);

는 str1 == str2가 falue가 된다.

 

==는 참조값을 비교할 때만 사용해라. int형과 같은 변수값일 때는 다를수가 있으므로 자바도큐먼트를 살펴보고 코딩하는게 좋다.

 

아무튼 문자열을 비교할 때는 String 클래스에서 제공되는 메소드인 equal()함수를 사용하는 것이 정확히 문자열을 비교할수 있는 방법이다.

 

Substring()이라는 함수는 문자열 객체에서 일부 문자열을 추출하는데 쓰인다. 자세한 사용법은 자바도큐먼트 참고.

 

위에서 언급한 메소드이외에 concat(str), trim(), toUpperCase(), toLowerCase(), replace(str, str)등 다양한 메소드들이 지원하므로 자바도큐먼트 참고해라. 네이버지식인에 물어봐도 된다.

 

 

 

StringBuffer

버퍼를 사용하여 버퍼안에서 문자열의 추가, 수정, 삭제작업을 한다. 새로운 객체를 만들지 않음. 쓰레드간 교착상태에 빠지는 위험을 방지하는 기능이 있다.

 

StringBuilder

버퍼를 사용하여 버퍼안에서 문자열의 추가, 수정, 삭제작업을 한다. 새로운 객체를 만들지 않음 쓰레드간 교착상태에 빠지는 위험을 방지하는 기능이 없다. 상대적으로 StringBuffer보다 성능이 좋다. 교착상태의 위험을 처리하는 연산이 없으므로 상대적으로 빠른건 당연하다.

 

StringBuffer와 StringBuilder는 지원하는 메소드는 기능과 사용방법이 같기 때문에 아래에 설명하는 메소드는 StringBuffer와 StringBuilder에서 사용가능하다. StringBuilder를 기준으로 설명하겠다. 책에 그리 설명되어 있기 때문에…

 

StringBuilder는 객체의 생성자는 문자열을 입력으로 할수도 있으며 숫자를 입력으로 할 수가 있다. 문자열을 입력으로 객체가 생성되면 문자열 +16의 크기로 생성이 되며, 숫자를 입력으로 생성이 되면 입력된 숫자크기만큼의 버퍼를 가진 채 생성이 된다. StringBuilder는 버퍼를 가지고 있다고 앞서서 설명했다.

 

StringBuilder의 조작 메소드는 다음과 같다.

 

Append(str) – 문자열 뒤에 str를 덧 붙임

Insert(int offset, str) - offset위치에 str을 붙임

Delete(int start, int end) – start에서 end -1까지 문자열 삭제

DeleteCharAt(int index) - index위치의 문자 하나 삭제.

 

기타 등등 많은 메소드들이 있으므로 자바도큐먼트 참고하자.

 

또한 버퍼크기에 관련된 메소드는 다음과 같다.

 

Capacity() – 버퍼크기를 리턴한다.

ensureCapacity(int size) – 버퍼의 크기를 주어진 size와 같거나 크게 늘린다. 메모리를 새로이 할당하는 연산은 많은 자원을 소비하기 때문에 여유있게 할당해 준다.

trimToSize() – 버퍼의 크기를 줄인다. 입력되어진 문자열에 비해서 너무 넉넉히 주어진 버퍼는 메모리 낭비이기 때문에 필요하다면 사용하는 것이 좋다.

 

 

StringTokenizer

주어진 문자열로부터 작은 단위의 문자열을 추출하는 기능. Ex)컴파일러.

 

StringTokenizer stok = new StringTokenizer(“aaa bbb ccc”);

이러한 방법으로 생성을 하고

 

Str1 = stok.nextToken();

Str2 = stok.nextToken();

Str3 = stok.nextToken();

과 같은 방법으로 토큰을 추출한다. 하지만 무작정 Str1 = stok.nextToken();으로 문자열을 추출하다가 추출할 문자열이 없으면 에러가 발생(정확히 말하면 예외)가 발생하므로 stok.hasMoreToken()이라는 메소드를 사용하여 문자열이 남아 있는지 확인하면서 처리해야 한다. 예시코드는 네이버 지식인 참고하라.

 

위에서 언급한 식으로 사용하면 기본적으로 공백문자를 구획문자로 사용하는데 구획문자를 프로그래머가 지정을 할 수가 있다.

구획문자란??? 토큰을 구별할 때 사용하는 문자.

 

StringTokenizer stok = new StringTokenizer(“aaa!bbb!ccc”, “!”);

위의 예시는 구획문자를 ! 를 사용하는 것이다.

 

또한 구획문자까지 토큰으로 추출할 수가 있는데

StringTokenizer stok = new StringTokenizer(“aaa!bbb!ccc”, “!”, true);

와 같이 마지막 파라미터를 true로 넘겨주면 ! 까지 토큰으로 추출할수 있다.

 

다시한번 말하지만 여기서 언급한 내용은 이러한 기능이 있다 정도의 참고사항이다. 완전한 내것으로 만들기 위해서는 자바도큐먼트를 볼줄 알며 스스로 코딩하는 방법이 좋다고 생각한다.

 

 

2. 날짜와 시간에 관련된 클래스

 

날짜에 관련된 클래스는 Calendar클래스이다. 하지만 Calendar클래스는 추상클래스이다. 그러한 이유는 나라와 지역마다 사용하는 시간대가 다르기 때문에(정확히 말하자면 날짜와 시간을 계산하는 방법이 다르기 때문에) 공통된 기능, 데이터를 추상클래스로 만들어 놓은 것이다. (추상클래스가 왜 필요한지 나타내는 좋은 예입니다)

 

아무튼 양력을 사용하는 나라(서양, 우리나라)에서는 일반적으로 GregorianCalendar클래스를 사용한다.

 

GregorianCalendar calendar = new GregorianCalendar();와 같이 객체를 생성하고 이를 사용해서 시간대를 출력할수 있다. 하나하나 설명을 하자면 지면이 낭비 될꺼 같으므로 중요한 것만 말하면

 

Calendar.setTimeZone(timezone);이라는 메소드를 사용하여 시간대를 변경할수 있다.

 

GregorianCalendar클래스는 날짜와 시간을 출력하는 클래스이지만 값을 얻어오기 위해서는 년, 월, 일, 시, 분, 초 등 각각의 값을 하나하나 얻어와야 하기 때문에 불편한 감이 없지 않다. 그래서 JDK 라이브러리에서는 조금 편한 방법을 제공하는데 DateFormat과 SimpleDateFormat클래스이다. 여기서 말하는 포맷은 하드디스크 포맷이 아니라 정형화된 양식을 뜻하는거 입니다.-_-;;;;

 

DateFormat과 SimpleDateFormat클래스를 사용하면 GregorianCalendar클래스에서 년월일시분초를 출력하는데 있어서 6번이나 객체에 접근하여 값을 얻어와야 했던 불편을 한줄의 코드로 해결할수 있습니다. 패턴문자라는 것을 사용해야 하지만 자세한 것은 자바도큐먼트를 참고하라.

 

 

3. 수학적 계산에 사용되는 클래스

 

math라는 클래스로 제공됩니다. Math 클래스를 사용함으로써 거듭제곱, 삼각함수, 로그함수와 같은 복잡한 연산을 간단히 해결할 수 있습니다. 제공되는 메소드의 특징은 정적메소드로 제공이 되어 있다는 것이 특징입니다. 정적메소드로 제공이 되면 객체를 생성하지 않아도 사용할수 있다는 것은 아시겠죠??

제공되는 메소드는 자바 도큐먼트를 참고하세요. 너무 많아서 쓰기가 겁이 납니다.-_-;;;

그외에 파이(3.14)등과 같은 상수도 제공합니다.

 

그외에 Random 클래스라는 것이 있습니다.

Random클래스는 난수를 발생하는 데 사용합니다. 게임 같은 곳에서 사용할수 있겠죠.

 

Random random = new Random();

Random random = new Random(long seed);

 

위와 같은 방법으로 Random 객체를 생성할수 있는데 객체 생성시 long 형의 값을 주게 되면 이 값은 난수를 발생하는데 있어서 초기값으로 사용하게 됩니다. 유용하게 쓰일곳이 있겠죠 ㅎ

 

Random클래스의 메소드들은 몇가지 있지만 여기서는 언급하지 않겠습니다. 자바도큐먼트 보세요ㅎ 한글로 된것도 찾아보면 있답니다.

반응형
Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]