반응형

## Arrays 클래스


 
Arrays 클래스는 배열 조작 기능을 가지고 있다. 
배열 조작이란 배열의 복사, 항목 정렬, 항목 검색과 같은 기능을 말한다. 
단순한 배열 복사는 System.arraycopy() 메소드를 사용할 수 있으나, 
Arrays는 추가적으로 항목 정렬, 항목 검색, 항목 비교와 같은 기능을 제공해준다. 
다음은 Arrays 클래스가 가지고 있는 메소드들이다. 
메소드 이름만 보면 어떤 기능을 제공하는지 쉽게 알 수 있다.
Arrays 클래스의 모든 메소드는 정적 (static) 이므로 Arrays 클래스로 바로 사용이 가능하다.





# 배열 복사

배열 복사를 위해 사용할 수 있는 메소드는 copyOf( 원본배열, 복사할길이), 
copyOfRange (원본배열, 시작 인덱스, 끝 인덱스)이다. 
copyOf() 메소드는 원본 배열의 0변 인덱스에서 복사할 길이만큼 복사한 타켓 배열을 리턴하는데, 
복사할 길이는 원본 배열의 길이보다 커도 되며, 타켓 배열의 길이가 된다.

 

copyOfRange( 원본배열, 시작 인덱스, 끝 인덱스)는 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열을 리턴한다.  시작 인덱스는 포함되지만, 끝 인덱스는 포함되지 않는다.  (긑 인덱스 -1)

 

-원본보다 큰 길이를 복사하면 타입의 기본값이 추가되어 저장된다.

-copyOfRange : copyOf는 0번 인덱스에서 부터가 고정이면, 이건 처음 인덱스 숫자를 지정해줄 수 있다.

 

 

 

 

 

 

 

 

 

 

 

-얕은복제 : 얕은복제는 원본 객체가 가르키는 원본을 똑같이 복사본도 가르킨다.

-깊은복제 : 깊은복제는 원복 객체가 가르키는 원본을 그대로 객체를 하나 더 생성해 복사본이 추가된 객체를 가르킨다.

 

-equals / Arrays.equals / Arrays.deepEquals의 비교

-equals : 위의 데이터 주소가 같냐

-Arrays.equals : 참조하는 데이터 주소가 같냐

-Arrays.deepEquals : 참조하는 데이터 주소의 값이 같냐

 

 

 

-Arrays.sort() : 오름차순 정렬

 

 

-한글도 정렬이 된다.

 

 

-binarySearch() 배열항목에서 특정 값에 대한 인덱스 번호를 얻는것을 배열 검색이라고 한다.

-배열 검색을 하려면 Arrays.sort()를 사용하여 정렬 후 사용 가능 하다.

-검색한 값과 일치하는 값이 있는경우 해당 인덱스 번호를 리턴하며 원하는 값이 없는 경우 음수(-값)를 리턴한다.

 

-binarySearch()를 문자열에 적용!!

 

 

 

 

## Wrapper(포장) 클래스


 
자바는 기본 타입(byte, char, short, int, long, float , double, boolean )의 값을 갖는 객체를 생성할 수 있다.
이런 객체를 포장(Wrapper) 객체라고 하는데, 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문이다. 
포장 객체의 특정은 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다. 
만약 내부의 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 한다.

포장 클래스는 java.lang 패키지에 포함되어 있는데, 다음과 같이 기본 타입에 대응되는 클래스들 이 있다. 
char타입과 int타입이 각각 Character와 Integer로 변경되고, 기본 타입의 첫 문자를 대문자로 바꾼 이름을 가지고 있다.





# 박싱(Boxing)과 언박싱(Unboxing)

 

// JDK 5.0 later = AutoBox

// Integer nOb = new Integer(10); : 기존에 맞는 방식

// Integer nOb = Integer.valueOf(10) : Boxing

Integer nOb = 10;

 

// int n = nOb.intValue(); : 일일이 언박싱

int n = nOb; // 자동 언박싱 Auto-Unboxing

double d = nOb; // double d = nOb.doubleValue();



기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing)이라고 하고, 
반대로 포장 객체에서 기본타입의 값을 얻어내는 과정을 언박싱(Unboxing) 이라고한다. 
다음은 8개의 기본타입의 값을 박싱하는 방법을 보여주고 있다. 
간단하게 포장 클래스의 생성자 매개값으로 기본 타입의 값 또는 문자열을 넘겨주면 된다.

생성자를 이용하지 않아도 다음과 같이 각 포장 클래스마다 가지고 있는 정적 valueOf() 메소드를 사용할 수도 있다

Integer obj = Integer.valueOf (1000); 
Integer obj = Integer.valueOf("1000");

이렇게 박성된 포장 객체에서 다시 기본 타입의 값을 얻어 내기 위해서는(언박싱하기 위해서는) 각
포장 클래스마다 가지고 있는 “기본타입명 + Value()" 메소드를 호출하면 된다.

 

-이걸 쓰는 이유는 나중에 list라는 것을 배우게 되는데, 이 list를 사용할 때 모든 타입을 담을 수 있는 Object를 타입으로 사용하게 되는데, Object 타입에는 객체만 넣을 수 있기 때문에, 이렇게 생성자를 이용해서 포장해주는 것이다. (쓰는 이유 : Object에 담기 위해서)

 

 

 

 

-박싱용 타입과 기본형 타입의 차이는 바로 첫글자가 대문자이냐 아니냐로 구분한다.

 

※ 쉽게 얘기해서 앞에 기본형 타입이 대문자면 객체로 자동 박싱이 되고, 소문자면 기본형 타입으로 자동 언박싱이 된다.

 

-자동박싱 (앞 타입 첫 글자 대문자)

 

-자동언박싱 (앞 타입 소문자)

 

 

-parse : 문자열 타입을 기본형으로 바꿔준다.

 

 

 

# 포장값 비교

-포장 객체는 내부 값을 비교하기 위해 ==와 != 연산자 사용 불가

-값을 언박싱해 비교하거나, equals() 메서드로 내부 값 비교할 것

(-128 ~ 127까지는 ==, != 연산자로 비교 가능)

 

-박싱 되어있는 객체는 equals() 메서드를 사용하자.

 

 

 

 

## Date, Calendar 클래스



# Date 클래스

Date는 날짜를 표현하는 클래스이다. 
Date 클래스는 객체간 날짜 정보를 주고 받을 때 주로 사용된다. 
Date 클래스에는 여러 개의 생성자가 선언되어 있지만 대부분 Deprecated(비권장)되어  현재는 Date () 생성자만주로 사용한다. 
Date () 생성자는 컴퓨터의 현재 날짜를 읽어 Date 객체로 만든다.

Date now = new Date();

현재 날짜를 문자열로 얻고 싶다면 toString() 메소드를 사용하면 된다. 
toString() 메소드는 영문으로 된 날짜를 리턴하는데 만약 특정 문자열 포맷으로 얻고 싶다면 
java.text.SimpleDateFormat 클래스를 이용하면 된다.

 

 

-Date 클래스 사용 예시

 

 

 

 

 

# Calendar 클래스



Calendar 클래스는 달력을 표현한 클래스이다. 
Calendar 클래스는 추상(abstract) 클래스이므로 new 연산자를 사용해서 인스턴스를 생성할 수 없다. 
그 이유는 날짜와 시간을 계산하는 방법이 지역과 문화, 나라에 따라 다르기 때문이다. 
우리나라만 해도 양력과 음력이 동시에 사용되고 있다. 
그래서 Calendar 클래스에는 날짜와 시간을 계산하는데 꼭 필요한 메소드들만 선언되어 있고,
특정 한 역법(層法, 날짜와 시간을 매기는 방법)을 따르는 계산 로직은 하위 클래스에서 구현하도록 되어 있다. 
특별한 역법을 사용하는 경우가 아니라면 직접 하위 클래스를 만들 필요는 없고 
Calendar 클래스의 정적 메소드인 getInstance() 메소드를 이용하면 
현재 운영체제에 설정되어 있는 시간대(TimeZone)를 기준으로 한 Calendar 하위 객체를 얻을 수 있다.


Calendar now = Calendar.getInstance();


Calendar 객체를 얻었다면 get() 메소드를 이용해서 날짜와 시간에 대한 정보를 읽을 수 있다.


int year = now.get(Calendar.YEAR );  //년도를 리턴 
int month = now.get(Calendar.MONTH ) + 1; //월을 리턴
int day = now.get(Calendar.DAY_OF_MONTH); //일을 리턴
int week = now.get(Calendar.DAY_OF_WEE K); //요일을 리턴 
int amPm = now.get(Calendar.AM_PM ); //오전/오후를 리턴 
int hour = now.get(Calendar.HOUR); //시를 리턴
int minute = now.get(Calendar.MINUTE); //분을 리턴 
int second = now.get(Calenda r.SECOND ); //분을 리턴

 

 

 

 

 

## Format 클래스


  
정수 세 자리마다 쉼표(,)를 넣으려면 정수를 문자열로 변환한 다음, 세 자리씩 끊어서 쉼표를 넣어야 한다.
다른 예로 많은 수의 점수를 리스트화해서 출력할 때 소수점 한 자리로 일정하게 맞추어 
각 점수에 10을 곱해서 정수화하고, 다시 10.0으로 나누어 소수점 한 자리로 만들어야 한다.   

날짜 역시 원하는 문자열로 출력하기 위해서는 
Calendar로부터 년, 월, 일, 시, 분, 초를 얻어 원하는 문자열로 조합하는 과정을 거쳐야 한다. 
자바에서는 이러한 문제들을 쉽게 해결할 수 있는 방법을 제공하는데, 이것이 형식 클래스이다. 
형식 클래스는 java.text 패키지에 포함되어 있는데, 숫자 형식을 위해 DecimalFormat, 
날짜 형식을 위해 SimpleDateFormat, 매개 변수화된 문자열 형식을 위해 MessageFormat 등을 제공한다.

 

# 숫자 형식 클래스(DecimalFormat)

DecimalFormat은 숫자 데이터를 원하는 형식으로 표현하기 위해서 
패턴을 사용하는데 다음 표는 패턴의 예를 보여준다.


적용할 패턴을 선택했다면 DecimalFormat 생성자 매개값으로 지 정해서 객체를 생성하면 된다. 
그리고 나서 format() 메소드를 호출해서 패턴이 적용된 문자열을 얻으면 된다.

 

DecimalFormat df = new DecimalFormat ("#, ###.0" ); 
String result = df.format(1234567.89);





# 날짜 형식 클래스(SimpleDateFormat)

Date 클래스의 toString() 메소드는 영문으로된 날짜를 리턴 하는데 
만약 특정 문자열 포맷으로 얻고 싶다면 java.text.SimpleDateFormat 클래스를 이용하면 된다. 
SimpleDateFormat 클래스도 날짜를 원하는 형식으로 표현하기 위해서 패턴을 사용하는데 
다음 표는 SimpleDateFormat의 패턴 작성에 사용되는 기호들이다.


패턴에는 자릿수에 맞게 기호를 반복해서 작성할 수 있다. 
예를 들어 yyyy는 년도를 4자리로 표시하라는 의미이고, MM, dd는 각각 달과 일을 2자리로 표시하라는 의미이다. 
적용할 패턴을 작성했다면 이 패턴을 SimpleDateFormat의 생성자 매개값으로 지정해서 객체를 생성하면 된다. 
그리고 나서 format() 메소드를 호출해서 패턴이 적용된 문자열을 얻으면 된다.

SimpleDateFormat sdf = new SimpleDateFormat ("yyyy 년 MM월 dd일");
String strDate = sdf.format (new Date ());

 

 


# 문자열 형식 클래스(MessageFormat)

데이터를 파일에 저장하거나, 네트워크로 전송할 때, 
그리고 데이터베이스 SQL문을 작성할 때 등 많은 부분에서 일정한 형식의 문자열을 사용한다. 

MessageFormat 클래스를 사용하면 문자열에 데이터가 들어갈 자리를 표시해 두고 
프로그램이 실행하면서 동적으로 데이터를 삽입해 문자열을 완성시킬 수 있다. 

예를 들어 다음과 같이 회원 정보를 출력한다고 가정해보자.

회원 ID   :  blue
회원 이름 : 홍길동
회원 전화 : 010-1234-1234


만약 id, name, tel 이라는 변수에 회원 정보가 저장되어 있을 경우 
다음과 같이 문자열 연결 연산자(+)로 출력할 문자열을 생성할 수 있을 것이다.

String result = "회원 ID:" + id +  "\n회원 이름" + name  + “ \n회원 전화" + tel;




이 방법도 나쁜 방법은 아니지만 + 연산자로 인해 복잡해 보이고 전체 문자열을 파악하기 힘들다.
다음과 같이 MessageFormat 클래스를 사용하면 좀 더 깔끔하게 
데이터를 삽입시켜주고 전체 문자열을 쉽게 예측할 수 있다.

String text = "회원 ID : {0} \n회원이름 : {1} \n회원전화 : {2}";
String result1 = MessageFormat.format(text, id, name, tel);




MessageFormat은 정적 format() 메소드를 호출해서 완성된 문자열을 리턴시킨다.    
format()메소드의 첫 번째 매개값은 매개 변수화된 문자열을 지정하고 
두 번째 이후의 매개값은 인덱스 순 서에 맞게 값을 나열하면 된다.

 

반응형

'java(2)↗' 카테고리의 다른 글

java 멀티 스레드  (0) 2024.05.02
java 중첩 클래스  (0) 2024.05.02
java String 클래스  (0) 2024.04.29
java 자바 API 다양한 클래스들  (0) 2024.04.26
java 예외  (0) 2024.04.25