[JAVA] java.lang 패키지

army246·2022년 4월 21일
0

JAVA

목록 보기
7/10
post-thumbnail
post-custom-banner

📌 java.lang

java는 기본적으로 다양한 패키지를 지원해준다.
그 중에서 java.lang 패키지는 java 프로그램의 기본적인 클래스를 담고 있는 패키지이다.
그래서 java.lang 패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있다.
많이 사용한 String, System 클래스도 java.lang 패키지 안에 속해있기 때문에 import하지 않고 사용할 수 있었다.

📌 Object 클래스

Object 는 최상위 부모 클래스에 해당한다.
그래서 자바의 모든 클래스는 Object 클래스의 자식클래스이다.
클래스를 선언할 때 extends로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속하게 된다.

❗️ equals() 메소드

public boolean equals(Object obj){
}

equals() 메소드의 매개 타입은 Object인데 이것은 모든 객체가 매개값으로 대입될 수 있다는 말이다.
왜냐하면 모든 객체는 Object 타입으로 자동 타입 변환될 수 있기 때문이다.
이때 Object 클래스의 equals() 메소드는 비교연산자인 '=='과 동일한 결과를 리턴한다.
두 객체가 동일한 객체이면 true, 그렇지 않으면 false를 리턴한다.

두 객체를 동등 비교할 때 equals() 메소드를 사용하는데 이 메소드는 객체를 비교해서 논리적으로 동등하면 true를 리턴하고 그렇지 않으면 false를 리턴한다.
논리적으로 동등하다는 것은 같은 객체이건 다른 객체이건 상관없이 객체가 저장하고 있는 데이터가 동일함을 뜻한다.

Object의 equals() 메소드는 직접 사용되지 않고 하위 클래스에서 재정의(Overriding)하여 논리적으로 동등 비교할 때 이용된다.
equals() 메소드를 재정의할 때에는 매개값이 기준 객체와 동일한 타입의 객체인지 먼저 확인해야 한다.
object 타입의 매개 변수는 모든 객체가 매개값으로 제공될 수 있기 때문에 instanceof 연산자로 기준 객체와 동일한 타입인지 먼저 확인한다.

정리하면 객체의 주소가 아닌 내용을 비교할 때는 Object의 equals() 메소드를 사용한다.

❗️ hachCode() 메소드

객체 해시코드는 객체를 식별하는 하나의 정수값을 의미한다.
Object 클래스의 hashCode() 메소드는 객체의 메모리 번지를 이요해서 해시코드를 만들어 리턴하기 때문에 객체마다 다른 값을 가지고 있다.
논리적 동등 비교할 때 hashCode()를 오버라이딩할 필요가 있다.
우선 hashCode() 메소드를 실행해서 리턴된 해시코드 값이 같은지를 본다.
해시코드 값이 다르면 다른 객체로 판단하고, 해시코드 값이 같으면 equals() 메소드로 다시 비교한다.
그렇기 때문에 hashCode() 메소드가 true가 나와도 equals()의 리턴값이 다르면 다른 객체이다.

결론적으로 보면 객체의 동등 비교를 위해서는 Obejct의 equals() 메소드만 재정의하지 말고 hashCode() 메소드도 재정해서 논리적으로 동등한 객체일 경우 동일한 해시코드가 리턴되도록 해야한다.

❗️ toString() 메소드

Object의 toString() 메소드는 객체의 문자 정보를 리턴한다.
객체의 문자 정보란? 객체를 문자열로 표현한 값을 말한다.
Object 하위 클래스는 toString() 메소드를 재정의(Overriding)하여 간결하고 유익한 정보를 리턴하도록 되어 있다.
가지고 있는 멤버 변수 값을 기반으로 객체의 정보를 리턴하도록 오버라이딩한다.

콘솔에 출력하기 위해서 System.out.println() 메소드를 사용해왔다. 이 메소드의 매개값은 콘솔에 출력할 내용인데, 매개값이 기본타입일 경우 해당 값을 그대로 출력한다.
만약 매개값으로 객체를 주면 객치의 toString 메소드를 호출해서 리턴값을 받아 출력하도록 되어있다.

📌 String 클래스

❗️ String 객체 생성

String은 두가지의 객체를 생성하는 방법이 있다.

  • new를 사용해서 생성
  • 문자열을 "" 로 감싸서 리터럴 형태로 생성.

new를 사용하면 새로운 메모리 공간에 String 객체가 각자 생성되고, 리터럴 형태의 문자열 객체를 위한 리터럴 영역이라는 별도 메모리를 사용한다.

❗️ String 메소드

자주 사용되는 String 메소드 들이다.

리턴 타입메소드 이름(매개 변수)설명
charcharAt(int index)특정 위치의 문자를 리턴
booleanequals(Object anObject)두 문자열을 비교
byte[]getBytes()byte[]로 리턴
byte[]getBytes(Charset charset)주어진 문자셋으로 인코딩한 byte[]로 리턴
intindexOf(String str)특정 문자열 내 인덱스 위치를 리턴
intlength()총 문자의 수(길이)를 리턴
booleanstartsWith(String prefix)특정 문자(prefix)로 시작하는지 여부 리턴
StringsubString(int beginidx)특정 인덱스(beginidx) 이후의 문자열을 리턴
Stringsubstring(int start, int end)start 인덱스부터 다른 end 인덱스까지의 문자열 리턴
Stringtrim()문자열 앞,뒤 공백을 제거한 다음 리턴
StringtoLowerCase()문자열을 소문자로 변환한 다음 리턴
StringtoUpperCase()문자열을 대문자로 변환한 다음 리턴
String[]split(String regex)특정 문자열(regex)을 구분자로 문자열을 분해해서 문자열 배열(String[])로 리턴

📌 StringBuffer 클래스

String은 고정 길이 문자열이다. 한번 생성된 String 객체는 변경되는 것이 아니라 새로운 문자열 객체가 만들어지는 것이다.
하지만 StringBuffer가변 길이 문자열을 제공한다.

❗️ StringBuffer 메소드

리턴 타입메소드설명
intlength()문자열의 길이 리턴
charcharAt(int index)특정 인덱스에 위치한 문자 리턴
StringtoStirng()StringBuffer 저장된 문자열 리턴
StringBufferdelete(int start, int end)start부터 end까지의 문자 제거
intindexOf(String str)int 문자열(str)의 인덱스 위치 리턴
StringBufferinsert(int offset, String str)offset 인덱스 위치에 문자열(str) 삽입
Stringsubstring(int start)start 위치에서부터 문자열을 잘라서 리턴

📌 Wrapper 클래스

기본 타입 (byte, char, short, long, float, double, boolean)의 값을 갖는 객체를 생성할 수 있다. 이런 객체를 포장(Wrapper) 객체라고 한다. 기본 타입의 값을 내부에 두고 포장하기 때문이다.
포장 객체의 특징은 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다는 점이다. 만약 내부의 값을 변경하고 싶다면 새로운 포장객체를 만들어야 한다.
포장 객체의 설계도인 포장 클래스는 java.lang 패키지 안에 포함되어 있다. 기본 타입과 대응되는 클래스가 있다.

기본 타입포장 클래스
byteByte
charCharacter
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

❗️ 박싱(Boxing)과 언박싱(Unboxing)

기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing)이고 하고,
포장 객체에서 기본 타입의 값을 얻어내는 과정을 언박싱(Unboxing)이라고 한다.

기본 타입 값을 직접 박싱, 언박싱하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 있따.
자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우에 발생한다.

Integer obj = 1000; 
// 자동 박싱

자동 언박싱은 기본타입에 포장 객체가 대입되는 경우와 연상에서 발생한다.

Integer obj = new Integer(2000);
int value1 = obj;			// 자동 언박싱
int value2 = obj; + 1000;	// 자동 언박싱

참고
혼자공부하는자바

profile
천천히 꾸준히
post-custom-banner

0개의 댓글