[JAVA] 자바 패키지(2)

msung99·2022년 5월 30일
0
post-thumbnail

Wrapper 클래스

  • Wrap : 감싸다 => 감싸는 기능
  • 기본 타입을 감싸서 객체화(클래스화) 시키는 기능
  • 기본 타입에 추가적인 기능 추가함

Wrapper 객체 생성방법

  • valueOf 메소드 활용

형태 : Integer i = Integer.valueOf(10);

1.기본 타입의 값으로 valueOf() 메소드에 인자로 넣어서 Wrapper 객체 생성
2.문자열로 Wrapper 객체 생성
3.Float 객체는 double 타입의 값으로 생성가능

Integer i = Integer.valueOf(10);
Character c = Character.valueOf('c');
Double f = Double.valueOf(3.14);  
Boolean b = Boolean.valueOf(true);  

// 문자열로 넣어도 처리가능
Integer i = Integer.valueOf("10)";
Double f = Dbouel.valueOf("3.14");
Boolean b = Boolean.valueOf("false");

// Float 객체는 double 타입의 값으로 생성가능
Float f = Float.valueOf((double) 3.14);

Wrapper 클래스의 메소드

Integer 의 메소드

  • num.intValue() : int 타입으로 값 리턴
  • Integer.parseInt("3.14") : 문자열을 기본 데이터 타입(정수형) 을 변환
  • Integer.toString(i) : 정수 i를 문자열로 변환
  • Integer.valueOf(i) : 정수 i를 담은 객체를 리턴

예제

  • Wrapper 클래스 객체의 toString() 메소드를 활용하면 해당 객체가 가지고 있는 값을 문자열로 변환해준다.


박싱과 언박싱

박싱(boxing)

기본 타입의 값을 Wrapper 객체로 변환
ex. Integer num = Integer.valueOf(10);

언박싱(unboxing)

Wrapper 객체에 들어있는 기본 타입을 값을 뺴내는 것
ex. int n = num.intValue();

  • 박싱과 언박싱은 자동으로 수행이 된다.
Integer num1 = 10;   // 자동 박싱 => valueOf() 사용하지 않고도 바로 정수 데이터를 할당해서 Wrapper 객체 생성가능
int num2 = num1;    // 자동 언박싱  => 반대로 Wrapper 객체를 기본타입 값으로 받을수도 있다.

String 클래스

String 생성자

  • String 객체의 인자로 아래와 같은 것들을 넘겨줄 수있다.
  1. 아무것도 안넘겨줌 => 빈 스트링 객체 생성
  2. char 배열
  3. 문자열(String)
  4. StringBuffer

스트링 객체 생성방법

  1. 리터럴로 객체 생성 => String s = "Hello"
  2. new 를 이용해 객체 생성 => String t = new String("Hello")

스트링 객체 특징

  • 저장한 문자열 수정 불가능
  • 수정을 원하면, 새로운 String 객체를 만들고 그 객체를 변수가 가리키게 해야함
  • 스트링 비교시 반드시 equals() 사용 => equals() 는 내용을 비교하기 때문

String 메소드

1. str1.compareTo(str2)

  • str1, str2 를 비교하고, 문자열이 같으면 0을 리턴
  • 동일하지 않다면 알파벳 순으로 비교함.
    • 알파벳 순으로 비교해서 나의(str1) 문자 알파벳이 먼저 나오면 음수 리턴
    • 나중에 나오면 양수 리턴
String java = "Java";
String cpp = "C++";   
int res = java.compareTo(cpp);  // Java 의 "J" 보다 C++ 의 "C" 알파벳 문자가 먼저 나오므로 양수리턴

2. 문자열 연결하기

방법1) 더하기 연산자 '+' 로 문자열 연결

  • 문자열 객체에 대해 + 연산을 진행하면 toString() 을 내부적으로 호출하여 문자열로 변환해서 연결한다.

방법2) str1.concat(str2);

  • str1 뒤에다 str2를 연결. 이때 새로운 문자열을 생성
    (String 객체는 수정이 불가능하고, 새로운 객체를 만들어야 하므로!)
String str1 = "fuck";
String str2 = "hi";

System.out.print("abcd" + 1 + true + str1 + str2); // abcd1truefuckhi  출력

s1 = s1.concat(s2); ` // fuckhi 출력

3.공백제거 - str1.trim()

  • String 객체는 중간에 있는 공백은 제거 못하고, 앞과 뒤에 있는 공백만 제거 가능
String a = "   abcd def     ";
String b = "   xyz\t";
String c = a.trim();  // "abcd def" 저장
String d = b.trim();  // "xyz" 저장

4.문자열 내의 문자접근 - str1.CharAt(i)

  • 문자열 객체 str1 의 인덱스 i의 문자에 접근
String a = "class";
char c = a.charAt(2);  // 'a' 저장 

5.str1.substring(i)

  • str1 안의 문자열의 인덱스 5부터 끝 인덱스 부분까지 문자열을 잘라서 리턴
String a = new String("Java,C++")
a = a.subString(5);   // "C++" 저장 

문자열 구분하기 - str1.split(",")

  • 문자열의 구분문자 로 구분해서 String 배열로 리턴
String a = "Java,C++";
String s[] = a.split(",");  // String 배열 s에 "Java" 와 "C++" 이 저장

예제

위 예제의 보충 설명


StringBuffer 클래스

  • String 클래스와 같이 문자열을 처리해줌
  • <=> 차이점 : 문자열을 직접 내부에서 수정할 수 있다!
    • 객체 내부에 Buffer 공간을 가지고 있고, 크기를 변경할 수 있다.
    • String 객체는 문자열을 수정하려면 따로 새로운 문자열 객체를 만들어야 했었음.

StringBuffer 메소드

  • 주의할점 : 연산 범위로 start, end 를 매개변수로 줬을 때 연산을 수행하는 범위가 start ~ (end-1) 임에 유의하자!!

    • 즉, start 위치에서 end 위치 바로 앞까지 문자열 연산을 수행한다.

예를들어 아래와 같은 것들 주의!

str1.insert(i, 문자열)

  • 인덱스 i에서 부터 시작해서 문자열을 삽입

ex. sb.insert(2, "nice");

str1.replace(i, j, 문자열)

  • 인덱스 i부터 j-1 까지를 인자값 문자열로 대체

ex. sb.replace(2,6, "bad"); => 인덱스 2~5를 문자열 bad 로 대체

str1.delete(i, j)

  • 인덱스 i 부터 j-1 사이의 문자 삭제

ex. sb.delete(0,2);

str1.reverse()

  • 문자열 뒤집기

ex.sb.reverse()

str1.length()

  • 길이 구하기

ex. int n = sb.length();

str1.setLength(i)

  • 문자열 크기를 i 로 재설정

ex. sb.setLength(3);

str1.charAt(i)

  • 인덱스 i의 문자 리턴

예제


StringBuilder 클래스

  • StringBuffer 와의 차이점
    • StringBuffer 와 달리 동기화 작업 기능이 없어서 단일 스레드 환경에서 사용 가능. 속도가 더 느리다.

StringTokenizer 클래스

  • 하나의 문자열을 "구분문자" 를 기준으로 여러 문자열로 분리해서 StringTokenizer 객체에 저장

  • 구분문자를 여러개 지정가능

  • 디폴트 구분문자 : "\n"

  • 하나하나 잘린 문자열들을 각각 토큰이라고 부름

형태1 : StringTokenizer 객체명 = new StringTokenizer(자를 문자열);

  • 디폴트 문자열을 구분문자로 삼는다.

형태2 : StringTokenizer 객체명 = new StringTokenizer(자를 문자열, 구분문자);

형태3 : StringTokenizer 객체명 = new StringTokenizer(자를 문자열, 구분문자, 구분문자)

  • 형태3처럼 선언하면 각 토큰 문자열에 구분문자도 같이 포함되서 생성됨

cf) String 클래스의 split() 메소드를 이용해 동일한 구현 가능

String str1 = "name=kitae&addr=seoul&age=21";
StringTokenizer st = new StringTokenizer(str1, "&");  // "&" 를 기준으로 분리

아래 그림의 2번째 예시처럼 구분문자 여러개 선언가능
( 여기서는 구분문자로 & 와 = 를 부여함 )


StringTokenizer 메소드

  • countTokens() : 토큰의 개수 리턴
  • hasMoreToken() : StringTokenizer 객체안에 토큰이 남아있는지 true / false 를 리턴
  • nexToken() : StringTokenizer 에서 토큰 하나를 꺼내온다.(리턴)

예제

  • nextToken() 으로 토큰을 하나씩 계속 꺼내옴 (객체안에 토큰이 남아있을 때 까지 꺼내옴. 이 조건을 위해 hasMoreToken 을 넣어줌)

예제2


Math 클래스

  • 모든 메소드가 static 타입이라서, 객체 따로 생성안해도 됨
    => Math.메소드명 이렇게 사용 가능

메소드

Math.random() : 0 <= 난수 < 1 사이의 난수를 생성

0개의 댓글