[신세계I&C KDT][Java 프로그래밍] #12 유틸리티 클래스 (0322)

박현아·2024년 3월 23일
0

신세계아이앤씨 KDT

목록 보기
12/56

cf) final
변수에 final 사용 : 상수 (값 수정 불가)
메서드에 final 사용 : 오버라이딩 불가 (static도)
클래스에 final 사용 : 상속 불가

1. 유틸리티 클래스 (API)

1) java.lang.String 클래스

(1) 사용 방법 2가지

  • 리터럴 이용
String s = "hello";
String ss = "hello";

-> 동일한 문자열은 한 번만 생성됨 (s == ss 일 때 true. 동일한 주소값)

  • new 이용
String s2 = new String("hello");
String ss2 = new String("hello");

-> new 할 때마다 매번 생성됨 (s == ss2 일 때 false)
중요 : 문자열 값을 비교할 때는 반드시 equals 메서드 사용 (s.equals(s2);)

(2) 메서드 정리

// 1. 생성
tring s = "helLO";
String s2 = "     helLo     ";

// 2.인스턴스 메서드 (s.메서드)
1) 문자열 길이
int n = s.length(); // 5

2) 특정 문자 조회
char c = s.charAt(0); // h

3) 부분열 
s.substring(1); // 1부터 끝까지 : elLO
s.substring(1,4)); // 1부터 endIndex 전까지 : elL

4) 특정 문자 위치
s.indexOf("e"); // 1
s.indexOf("E"); // 일치하는 문자가 없으면 -1 반환

5) 대문자		
s.toUpperCase(); // 전체 다 대문자로

6) 소문자
s.toLowerCase(); // 전체 다 소문자로

7) 문자열 값비교		
s.equals("helLO"); // true
s.equalsIgnoreCase("hello"); // true (대소문자 무시)

8) 문자열 포함여부 
s.contains("el"); // true
s.contains("le")); // false

9) 치환
s.replace("h", "H"); // h를 H로 : HelLO

10) 공백 제거		
String x = s2.trim();
System.out.println(x); // helLo
s2.trim().length(); // 공백제거 후 길이(메서드체인)

11) 문자열 연결
s.concat("!!!"); // helLO!!!

12) 문자열을 char[]로 반환 		
char[] chr = s.toCharArray();
System.out.println(Arrays.toString(chr); // [h, e, l, L, O]

13) 구분자로 분리해서 배열로 변환		
String x2 = "홍길동/이순신/유관순";
String[] x3 = x2.split("/");
System.out.println(Arrays.toString(x3); // [홍길동, 이순신, 유관순]

// 3. static 메서드 (String.메서드)
(1) "10" --> 10 문자열 숫자를 정수형으로
int k = Integer.parseInt("10");
System.out.println(k+20); // 30
		
// 비문자열 --> 문자열
String x4 = String.valueOf(true); // "true"
String x5 = String.valueOf(100); // "100"
String x6 = String.valueOf(3.14); // "3.14"
String x7 = String.valueOf(new char[] {'A','B','C'}); // "ABC"

(3) 특징

  • String은 한 번 생성하면 변경 안 됨. 메서드를 적용하면 새로운 문자열이 생성되는 것 (문자열 값 변경이 빈번하다면 String 사용 지양)

2) java.lang.StringBuilder 클래스

(1) 사용 방법

StringBuilder sb = new StringBuilder("hello");

(2) 메서드

// 1. 생성
StringBuilder sb = new StringBuilder("hello");
		
// 2. 메서드
System.out.println("1. 값출력: " + sb); // sb.toString() 동일
		
System.out.println("2. 값 추가: " + sb.append(true)); //  hellotrue
System.out.println("2. 값 추가: " + sb.append(100)); // hellotrue100
System.out.println("2. 값 추가: " + sb.append(3.14)); // hellotrue1003.14
System.out.println("2. 값 추가: " + sb.append("world")); // hellotrue1003.14world
System.out.println("2. 값 추가: " + sb.append(new char[] {'A','B'})); // hellotrue1003.14worldAB
		
System.out.println("3. 값 삽입: " + sb.insert(0, "홍길동")); //홍길동hellotrue1003.14worldAB 

System.out.println("4. 값 삭제: " + sb.delete(0, 3)); //hellotrue1003.14worldAB 
System.out.println("4. 값 삭제: " + sb.deleteCharAt(0)); //ellotrue1003.14worldAB 
		
System.out.println("5. 값 거꾸로: " + sb.reverse()); //BAdlrow41.3001eurtolle
		
//String에서도 제공되었던 메서드
System.out.println("6. 길이: " + sb.length()); // 22
System.out.println("7. 특정문자얻기: " + sb.charAt(0)); // B
System.out.println("8. 특정문자 위치얻기: " + sb.indexOf("w")); // 6
System.out.println("9. 부분열: " + sb.substring(6)); // w41.3001eurtolle
System.out.println("9. 부분열: " + sb.substring(6,7)); // w
		
// StringBuilder --> String
String xxx = sb.toString();
System.out.println(xxx);

(3) 특징

  • StringBuilder는 한 번 생성하면 변경도 가능하다 (버퍼 기능)
    => 문자열 값 변경이 빈번하다면 StringBuilder 사용하기

3) wrapper 클래스

  • 기본형 8 개에 해당하는 참조형인 클래스를 묶어서 부르는 이름
  • wrapper 클래스 내의 상수 및 메서드의 도움을 받을 수 있다
기본형wrapper 클래스
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

(1) 특징

  • 거의 대부분이 static이라 new 없이 손쉽게 사용 가능

cf) 오토박싱 (auto boxing), 오토언박싱 (auto unboxing)

4) 날짜 데이터

(1) java.util.Calendar

  • Date보다 나중에 지원
  • new 방법으로 생성하지 않고 메서드를 이용해서 인스턴스를 얻는다
Calendar rightNow = Calendar.getInstance(); // getInstance() 안에서 new하고 리턴해줌
int year = cal.get(Calendar.YEAR):

(2) java.util.Date

  • 초창기 지원
  • 대부분의 기능이 deprecated 됨 (더 이상 사용되지 않음)
Date d = new Date():
System.out.println(d); // Fri Mar 22 15:16:41 KST 2024
  • 유틸리티 클래스인 java.text.SimpleDateFormat 이용해서 개별적인 날짜 정보를 얻을 수 있음
import java.util.Date;
import java.text.SimpleDateFormat;

Date d = new Date(); // Fri Mar 22 14:45:08 KST 2024

SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); // "패턴" 지정
String year = sdf.format(d);

5) java.util.StringTokenizer

: String 클래스의 split(" ") 기능보다 업그레이드 된 클래스

StringTokenizer st = new StringTokenizer(s, ",");
System.out.println("token 갯수: " + st.countTokens());
// 출력	
while(st.hasMoreTokens()) {
System.out.println("token 얻기: " + st.nextToken());			
}
		
// 구분자가 여러 개인 경우에도 잘 분리해준다.
String x = "홍|길동, 이순|신, 유관순/AAA/BBB";
StringTokenizer st2 = new StringTokenizer(x, "/,|");
// 출력
while(st2.hasMoreTokens()) {
System.out.println("token 얻기2: " + st2.nextToken());
}

6) enum 타입

: 개별적으로 사용되는 여러 개의 상수를 효율적으로 사용 가능한 객체

public enum enum이름 {
	상수명, 상수명2,...;
}
  • enum명.상수명 형식으로 사용
  • 상수값은 알려진 값이 대부분 (요일, 월, 계절)
  • switch 문에서 주로 사용

7) java.util.Arrays

: 배열 관련 유틸리티 클래스

  • 배열 자체에는 메서드가 없고 length 속성만 제공된다
// 1. 오름차순 정렬 Arrays.sort()
int[] arr = {6, 2, 1, 85, 23};
Arrays.sort(arr);
Arrays.toString(arr); // [1, 2, 6, 23, 85]
// cf) 내림차순 정렬: Arrays.sort(arr, Collections.reverseOrder()); : Integer만 가능
		
// 2. 배열값 출력 Arrays.toString() ★ 
int[] arr = {6,2,1,85,23};
Arrays.toString(arr);  // [1, 2, 6, 23, 85]
		
// 3. 여러 개의 값들 --> 컬렉션의 List ★
List<Integer> list = Arrays.asList(10,20,30);
Arrays.asList(10,20,30);  // [10, 20, 30]
		
// 4. 전체 배열값 채우기 Arrays.fill( , )
int[] arr = {6,2,1,85,23};
Arrays.fill(arr, 100);
Arrays.toString(arr);  // [100, 100, 100, 100, 100]
		
// 5. 특정 범위 배열값 채우기 Arrays.fill( , , , )
int[] arr = {6,2,1,85,23};
Arrays.fill(arr, 0, 3, 100); // fill(배열, start, end, 변경값)
Arrays.toString(arr);  // [100, 100, 100, 85, 23]
		
// 6. 배열값 비교 Arrays.equlas( , )
int[] arr = {6,2,1,85,23};
int[] arr2 = {6,2,1,85,23};
Arrays.equals(arr, arr2);  // true
		
// 7. 배열에서 특정값의 위치얻기 Arrays.binarySearch( , );
int[] arr = {6, 2, 1, 85, 23};
Arrays.sort(arr); // 꼭 오름차순, 내림차순 정렬 후 해야 됨
Arrays.binarySearch(arr, 85) );  // 3

// 8. 배열복사 및 크기변경 Arrays.copyOf( , );
int[] arr = {6, 2, 1};
int[] arr2 =Arrays.copyOf(arr, 5);
Arrays.toString(arr2);  //[6, 2, 1, 0, 0]

0개의 댓글