[Java] - Java.lang패키지

이창희·2022년 6월 24일
0

Java

목록 보기
12/13
post-thumbnail

1. java.lang 패키지 개요

  • 모든 자바 프로그램에서 기본적으로 사용하는 필수 클래스들은 모아 놓은 패키지다.
  • Java.lang 패키지의 클래스는 import 선언 없이 사용 할 수 있다
  • 최상위 클래스인 Object를 시작으로 다양한 클래스들이 제공된다.

2. Object 클래스

1) 최상위 부모 클래스

모든 클래스들은 최상위 상속으로 Object클래스를 상속받는다.

왜 모든 클래스가 기본적으로 Object 클래스를 상속하도록 했을까?

1. 클래스라면 반드시 가져야할 공통의 메소드를  Object 클래스로부터 상속 받도록 하려는 것이다.
2. 모든 자바 객체를 하나의 타입으로 묶어서 다형성을 적용하기 위해서이다.

2) hashCode() 메소드

hashCode() 메소드는 생성된 객체의 메모리 주소정보를 리턴한다.

public class ObjectTest {

	public static void main(String[] args) {
		Student student1 = new Student("박하임", 83);
		System.out.println("student1 객체의 해시코드 값 : " + student1.hashCode());
		
		Student student2 = new Student("박하임", 83);
		System.out.println("student2 객체의 해시코드 값 : " + student2.hashCode());
	}
}

[실행 결과]

student1 객체의 해시코드 값 : 13447582
student2 객체의 해시코드 값 : 1910163204

객체의 주소가 다른 것을 알 수있다.

이처럼 객체의 주소는 다르지만 값이 같을 경우 두 객체를 같은 객체로 처리할 일이 생겨버린다.

결국 Object 클래스로부터 hashCode() 메소드가 상속되지 않도록 오버라이딩 해야한다.

import java.util.Objects;

public class Student extends java.lang.Object {
	private String name;
	private int score;

	public Student(String name, int score) {
		super();
		this.name = name;
		this.score = score;
	}
	
//Objects 클래스의 hash() 메소드를 매개변수로 받은 값들을 이용해서 해시코드를 생성하여 리턴한다.
	public int hashCode() {
		return Objects.hash(name, score);
	}

	public String getName() {
		return name;
	}
	public int getScore() {
		return score;
	}
}

<실행결과>

student1 객체의 해시코드 값 : 13447582
student1 객체의 해시코드 값 : 13447582

3) equals() 메소드

(1) equals() 기능

객체의 주소가 아닌 내용을 비교할 때 사용한다.

그러나 Object로부터 상속된 equals() 메소드는 객체의 주소를 비교하는 ‘==’ 연산자와 동일하게 동작한다.

equals() 메소드가 객체의 내용을 비교할 수 있도록 equals() 메소드를 오버라이딩해야 한다.

import java.util.Objects;

public class Student extends java.lang.Object {
	private String name;
	private int score;
	
	public Student(String name, int score) {
		super();
		this.name = name;
		this.score = score;
	}

	public int hashCode() {
		return Objects.hash(name, score);
	}

	public boolean equals(Object obj) {
		Student other = (Student) obj;
		return name.equals(other.name) && score == other.score;
	} 

	public String getName() {
		return name;
	}
	public int getScore() {
		return score;
	}
}

4) toString() 메소드

toString()은 객체가 소유한 멤버변수에 할당된 값을 하나의 문자열로 구성하여 리턴해준다.

Object의 toString() 메소드는 클래스의 이름과 객체의 메모리 주소를 결합한 문자열을 리턴한다.

따라서 실제 객체가 가지고 있는 멤버변수의 값을 기반으로 객체의 정보를 리턴하도록 toString() 메소드를 오버라이딩해야 한다.

import java.util.Objects;

public class Student extends java.lang.Object {
	private String name;
	private int score;

	public Student(String name, int score) {
		super();
		this.name = name;
		this.score = score;
	}

	@Override
	public int hashCode() {
		return Objects.hash(name, score);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		return Objects.equals(name, other.name) && score == other.score;
	}

	public String getName() {
		return name;
	}
	public int getScore() {
		return score;
	}

	public String toString() {
		return "학생의 이름(name)은 " + name + ", 점수(score)는 " + score + "점";
	}
}

System.out.println()메소드에서 참조변수 이름만 사용해도 내부적으로 toSting() 메소드는 자동으로 호출된다.

3. String 클래스

1) String 객체 생성 방법

  1. String name1 = new String (”김둘리”);
  2. String name1 = “김둘리”;

new를 사용하면 새로운 메모리 공간에 String 객체가 각각 생성된다.

2) String 메소드

메소드설명
charAt(int idx) : char인덱스(idx)에 위치한 문자(char)를 리턴한다.
concat(String str) : String새로운 문자열 (str)을 연결한다.
endsWith(String suffix) : boolean특정 문자열(suffix)로 끝나는지 여부를 리턴한다.
startsWith(Strng prefix) : boolean특정 문자(prefix)로 시작하는지 여부를 리턴한다.
indexOf(String str) : int특정 문자(ch)의 인덱스 위치를 리턴한다.
indexOf(int ch) : int특정 문자열(str)의 인덱스 위치를 리턴한다.
toLowerCase() : String문자열을 소문자로 변환하여 리턴한다.
toUpperCase() : String문자열을 대문자로 변환하여 리턴한다.
split(String regex) : String[]특정 문자열(regex)을 구분자로 문자열을 분해여 문자열 배열(String[])로 리턴한다.
trim() : String문자열 앞 뒤의 공백을 제거하여 리턴한다.

4. StringBuffer 클래스

1) 고정 길이와 가변 길이

String : 고정 길이 문자열이다.

StringBuffer : 가변 길이 문자열이다.

2) StringBuffer 메소드

메소드설명
length() : int문자열의 길이를 리턴한다.
charAt(int index) : char특정 인덱스에 위치한 문자를 리턴한다.
toStirng() : StringStringBuffer 저장된 문자열을 리턴한다
delete(int start, int end) : StringBufferstart부터 end까지의 문자를 제거한다.
indexOf(String str) : int문자열(str)의 인덱스 위치를 리턴한다.
insert(int offset, String str): StringBufferoffset 인덱스 위치에 문자열(str)을 삽입한다.
substring(int start) : Stringstart 위치에서부터 문자열을 잘라서 리턴한다.

5. 래퍼(Wrapper) 클래스

1) 래퍼 클래스의 종류

기본타입을 감싸서 클래스 형태로 포장해주는 것을 래퍼 클래스 라고 한다.


출처: https://pridiot.tistory.com/60

2) 오토 박싱/언박싱

public class WrapperTest3 {

	public static void main(String[] args) {
		
		int score1 = 83;		

		// 정상적인 박싱
		Integer wrapperInt1 = Integer.valueOf(score1);

		// 정상적인 언박싱
		int basicInt1 = wrapperInt1.intValue();
		System.out.println("점수1 : " + basicInt1);
		
		
		int score2 = 100;

		// 오토 박싱
		Integer wrapperInt2 = score2;

		// 오토 언박싱
		int basicInt2 = wrapperInt2;
		System.out.println("점수2 : " + basicInt2);
	}
}
profile
백앤드 개발자를 꿈꾸는 개발자 지망생입니다.

0개의 댓글