쉽게 쉽게

Java.lang 패키지 본문

개발공부/Java

Java.lang 패키지

곱마2 2023. 3. 21. 10:49
반응형

이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글입니다.


java.lang패키지에는 자바프로그래밍에 사용하는 기본이 되는 클래스들이 존재한다.

1. Object클래스

Object클래스는 모든 클래스의 최고 조상
Object클래스의 멤버들은 모든 클래스에서 사용가능하다.

★ 자주 사용되는 메서드

(1) equals(Object obj)

Object의 equals메서드는 인스턴스의 주소값을 비교하여 동일한 결과인지 boolean값으로 알려주는 역할을 한다.

value v1 = new value(10);
value v2 = new value(10);

if(v1.equals(v2)){
    System.out.println("v1 = v2");

}else{
    System.out.println("v1 != v2");
}

//결과는 false로 else에 있는 값(v1 != v2)이 수행된다.

두 인스턴스의 값이 10으로 같을지라도 주소값이 다르기 때문에 false를 반환한다.

값을 비교하도록 만들기 위해서는 equals메서드를 오버라이딩하여 사용한다.
String, Date, File 클래스 등에서는 주소값 비교가 아닌, 값을 비교하도록 오버라이딩해서 사용하고 있다.

 

(2) hashCode()

JVM이 부여한 코드값
인스턴스가 저장된 가상머신의 주소를 10진수로 반환

Object클래스의 hashCode메서드는 객체의 주소값으로 해시코드를 생성하기 때문에 모든 객체에 대해 항상 다른 해시코드값을 반환한다.

이를 String클래스는 문자열 내용이 같으면 동일한 해시코드를 반환하도록 오버라이딩해서 사용하고 있다.

 

(3) toString()

인스턴스에 대한 정보를 문자열로 제공할 목적으로 정의한 메서드이다.
Object클래스에 정의된 toString()은 아래와 같다.

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

즉 클래스이름에 16진수의 해시코드 값을 출력한다.

String클래스 이를 오버라이딩하여 문자열 값을 출력하도록 하고 있다.
System.out.println(str)은 System.out.println(str.toString())과 같다.

 

(4) clone()

자신을 복제하여 새로운 인스턴스를 생성하는 일을 한다.
clone()메서드를 사용하려면 Cloneable 인터페이스를 구현해야한다.

그러나 Object클래스에 정의된 clone()은 단순히 인스턴스의 값만 복사하기 때문에 완전한 복제가 아니다.
(얕은 복사)
즉 원본을 변경하면 복사본도 영향을 받는다.

원본이 참조하고 있는 객체까지 복제(깊은 복사)하기 위해서는 새로운 참조변수를 선언하여 복사본을 담아줘야 한다.

 

얕은 복사와 깊은 복사는 이전 글 참고

 

배열

이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글입니다. 1. 배열이란? 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 2. 배열의 복사 배열은 한번 생성하면 길이

minsu092274.tistory.com

2. String클래스

String클래스 내에 정의된 생성자와 메서드의 목록이다.

charAt(index)
문자열에서(index)위치에 해당하는 문자 반환
String -> char 타입으로 출력한다고 생각

length()
문자열 길이 반환

substring(from to)
from부터 to에 있는 문자열 반환(범위 끝 포함x)

equals()
문자열 내용이 동일한지 비교, 값비교

equalsIgnoreCase()
대소문자 구분없이 비교

toCharArray()
문자배열로 변환

compareTo(str)
문자열과 사전순서로 비교 , 같으면 0, 이전이면 음수, 이후면 양수
int I = “aaa”.compareTo(“aaa”) = 0
int I = “aaa”.compareTo(“bbb”) = -1
int I = “bbb”.compareTo(“aaa”) = 1

concat(str)
문자열을 뒤 덧붙인다

boolean contains()
저장된 문자열이 포함됐는지 검사
s = “abcd”
t = s.contains(“bc”) = true

boolean endsWith()
지정된 문자열로 끝나는지 검사

boolean startsWith()
지정된 문자열로 시작하는지 검사

indexof(ch)
주어진 문자가 문자열에 존재하는지 확인하여 위치를 알려준다
없으면 -1

indexof(ch, pos)
주어진 문자가 문자열에 존재하는지 지정된 위치부터 확인하여 위치를 알려준다.
없으면 -1

indexof(str)
주어진 문자열이 존재하는지 확인하여 위치를 알려준다
없으면 -1

lastIndexof(ch)
지정된 문자를 문자열의 오른쪽 끝에서부터 찾아서 위치를 알려준다.
없으면 -1

lastIndexof(str)
지정된 문자열을 문자열의 오른쪽 끝에서부터 찾아서 위치를 알려준다.
없으면 -1

replace(old, new)
문자열 중 문자를 새로운 문자로 바꿔 반환, 문자열도 가능

replaceAll(old, new)
지정된 문자열 중 일치하는 모든 문자를 새로운 문자로 바꿔 반환

replaceFirst(old, new)
지정된 문자열 중 일치하는 첫 번째 문자를 새로운 문자로 바꿔 반환

string[] split(regex)
문자열을 지정된 분리자로 나누어 문자열 배열에 반환

string[] split(regex, limit)
문자열을 지정된 분리자로 나누어 문자열 배열에 반환, 단 문자열 전체를 지정(하나씩 저장되다가 남은 것은 마지막 배열에 몰빵되어 저장됨)

join(regex)
지정된 문자로 결합, split()반대 (단 java8버전에서만 사용가능)

toLowerCase(), toUpperCase()
모든 문자열 소문자, 대문자로 반환

trim()
문자열 왼쪽 끝과 오른쪽 끝에 있는 공백제거(중간은 x)
static string valueOf(boolean b)
static string valueOf(char c)
static string valueOf(int i)
static string valueOf(long l)
static string valueOf(float f)
static string valueOf(double d)
static string valueOf(object o)
string.valueOf()
지정된 값을 문자열로 변환하여 반환

(Byte,Short,Integer,Long,Float,Double).valueOf()은 지정된 래퍼클래스로 변환

3. StringBuffer클래스와 StringBuilder클래스

(1) StringBuffer클래스

String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능하다.

내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며, StringBuffer인스턴스를 생성할 때 그 크기를 지정할 수 있다.

StringBuffer클래스는 버퍼의 크기를 지정해주지 않으면 16개의 문자를 저장할 수 있는 크키의 버퍼를 생성한다.

StringBuffer클래스와 내에 정의된 생성자와 메서드의 목록이다.

append(값)
값을 문자열로 변환하여 stringbuffer인스턴스가 저장하고 있는 문자열의 뒤에 붙인다.

capacity()
버퍼크기를 알려준다(length는 문자열의 길이를 알려준다)

charAt(index)
지정된 위치에 있는 문자 반환

delete(start,end)
시작위치부터 끝 위치 사이에 있는 문자 제거(끝 위치 제외)

deleteCharAt(index)
지정된 위치의 문자 제거

insert(pos, 값)
값을 문자열로 반환하여 지정된 위치에 추가

replace(start,end,str)
지정된 범위의 문자들을 문자열로 바꾼다(끝 포함 x)

reverse()
저장되어 있는 문자열의 순서를 거꾸로 나열

setCharAt(index, ch)
지정된 위치의 문자를 주어진 문자로 바꾼다.

setLength(new)
문자열 길이 변경, 빈공간은 ‘\u0000’으로 채움

substring(from to)
from부터 to에 있는 문자열 반환

(2) StringBuilder클래스

StringBuffer는 멀티쓰레드에 안전하도록 동기화되어 있다. 이는 멀티쓰레드로 작성된 프로그램이 아닌 경우, 불필요하게 성능을 떨어뜨리게 된다.

그래서 쓰레드의 동기화를 뺀 StringBuilder가 추가되었다.
둘은 완전히 동일한 기능으로 작성되어 있다.

4. Math클래스

Math클래스는 기본적인 수학계산에 유용한 메서드로 구성되어 있다.
Math클래스의 모든 메서드는 static이므로 인스턴스를 생성할 필요가 없다.

 

★ 자주 사용되는 Math클래스의 메서드

abs()
(double,float,int,long) // 매개변수타입
절대값 반환

ceil(double)
올림

floor(double)
내림

max(1,2)
(double,float,int,long)
1,2 중 큰 쪽 반환

min(1,2)
(double,float,int,long)
1,2 중 작은 쪽 반환

random()
0.0~1.0 범위의 임위의 double값 반환(1.0은 포함x)

rint(double)
주어진 double과 가장 가까운 정수값 반환

round()
(double,float)
소수점 첫째자리에서 반올림한 정수값을 반환

구현예제

// abs()
 System.out.println(Math.abs(-10));   // 출력값 : 10

// random()
System.out.println((int)(Math.random() * 10)); // 0~9 사이 난수 발생

// max(), min()
System.out.println(Math.max(10,100)); // 100
System.out.println(Math.min(10,100)); // 10

// ceil()
System.out.println(Math.ceil(10.0)); // 10.0 
System.out.println(Math.ceil(10.1)); // 11.0
System.out.println(Math.ceil(10.000001)); // 11.0 

// floor()
System.out.println(Math.floor(10.0)); // 10.0
System.out.println(Math.floor(10.9)); // 10.0 

// round()
System.out.println(Math.round(10.0)); // 10 
System.out.println(Math.round(10.4)); // 10 
System.out.println(Math.round(10.5)); // 11

5. 오토박싱 & 언박싱

JDK1.5이전에는 기본형과 참조형 간의 연산이 불가능했기 때문에, 래퍼 클래스로 기본형을 객체로 만들어서 연산해야 했다.

int i = 5;
Integer iObj = new Integer(7);

int sum = i + iObj; // 에러 기본형과 참조형 연산 불가

그러나 JDK1.5 이후에는 컴파일러가 자동으로 변환하는 코드를 넣어주기 때문에 연산이 가능해졌다.

int i = 5;
Integer iObj = new Integer(7);

int sum = i + iObj.intValue(); // Integer객체를 int 타입으로 변환해주는 메서드
컴파일러가 자동으로 추가 

기본형 값을 래퍼 클래스의 객체로 자동 변환해주는 것'오토박싱(autoboxing)'이라 하고, 반대로 변환하는 것은 '언박싱(unboxing)'이라 한다.

6. StringTokenizer클래스

StringTokenizer긴 문자열을 지정된 구분자를 기준으로 토큰이라는 여러 개의 문자열로 잘라내는 데 사용된다.

String의 split()이나 Scanner의 useDelimiter()를 사용하여 문자열을 잘라낼 수 있지만, 두 가지 방법은 정규식 표현을 사용해야하므로 StringTokenizer를 사용하는게 간단하면서 명확한 결과를 얻을 수 있다.

StringTokenizer구분자로 단 하나의 문자 밖에 사용하지 못하기에 여러 형태의 구분자를 사용할 때는 정규식을 사용하는 메서드를 이용해야 한다.

 

★ StringTokenizer의 주로 사용되는 생성자와 메서드

StringTokenizer(str,delim)
문자열을 지정된 구분자로 나누는 StringTokenizer 생성(구분자는 토큰으로 간주되지 않음)

StringTokenizer(str,delim,boolean)
문자열을 지정된 구분자로 나누는 StringTokenizer 생성(true로 하면 구분자도 토큰을 간주)

countTokens()
전체 토큰 수 반환

hasMoreTokens()
토큰이 남아있는지 알려준다

nextToken()
다음 토큰을 반환

구현예제

String javaCode = "num+=1";

StringTokenizer str3 = new StringTokenizer(javaCode, "+=", true);
while(str3.hasMoreTokens())
    System.out.println(str3.nextToken());

    //결과
    num
    +
    =
    1

StringTokenizer str4 = new StringTokenizer(javaCode, "+=");
while(str4.hasMoreTokens())
    System.out.println(str4.nextToken());

    //결과
    num
    1
잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다.

 

반응형

'개발공부 > Java' 카테고리의 다른 글

컬렉션 프레임웍  (0) 2023.03.23
날짜와 시간  (0) 2023.03.22
예외처리  (0) 2023.03.20
인터페이스  (0) 2023.03.20
객체지향언어(캡슐화, 다형성)  (0) 2023.03.17