JAVA의 정석

김민석·2026년 2월 28일

java.lang 패키지

자바의 가장 기본적인 클래스를 모아놓은 패키지

  • 객체 & 클래스 - Object,Class 등
  • 래퍼 클래스 - Boolean,Integer 등
  • 문자열 관련 - String,StringBuffer 등
  • 예외 관련 -Error, Exception 등
  • rlxk - Math,System 등

Object 클래스

equals(Object obj)

객체 자신과 obj의 주소를 비교해서 true 혹은 false 반환

오버라이딩 해서 값 비교로 바꿀 수 있음.

class boolean equlas(Object obj) {
	if(obj instanceof Person p) 
   	return id == p.id;
   return false;
}

hashCode() - 객체의 해시코드 반환

객체의 주소 또는 인스턴스 변수로 생성한 해시코드 반환

toString() - 객체를 문자열로 반환

clone()

객체 자신을 복사한 새로운 객체를 반환(얕은 복사)
Cloneable 구현한 class만 복제 가능함

오버라이딩 조건

  1. 선언부 일치

  2. 접근제어자 좁게 X

  3. 예외선언 많이 x

    얕은복사 vs 깊은복사

    얕은복사 : 객체만 복사 (서로 공유)
    깊은복사 : 객체가 참조하는 객체도 복사, 주소값이 다름

    getClass()

    객체 자신을 생성한 Class객체 반환

    String 클래스

    문자열을 다루는데 사용하는 불변 클래스

    String a = "a";
    String b = "b";
    a = a+b;

    a = a+b;를 하먄 새로운 참조값이 생성되서 문자열이 변하지 않는다고 말하는 것. 문자열이 바뀌는데 참조값이 안변해서 불변 클래스라고 하는 것.

    String 비교

    값 비교는 ==를 사용하고, 객체 비교는 equals를 사용한다.

==로 비교를 하면 값 비교임 그래서 주소값을 비교함. 그냥 문자열 끼리는 해당 문자열에 값을 공유 즉 같은 참조값을 사용하고 new String으로 새로운 String 인스턴스를 생성하면 같은 문자열이라도 새로운 참조값을 가져 서로 비교했을때 false가 나옴.
equals는 내용 을 비교하기 떄문에 new String 끼리 비교해도 true가 나옴.

String 생성자와 메서드

charAt(int index) : index 위치에 있는 문자 알려줌
int compareTo(String str) : "aaa".compareTo("aaa");
aaa 라는 문자열과 compareTo 안에있는 aaa 라는 문자열을 사전순으로 비교 같을경우 0, 이전이면 -1, 이후이면 1 을반환해줌.
boolean contains : "abcd".contains("ab") 앞에 문자열에 포함이 되어있는지 포함되어 있으면 true 포함 안되어있으면 false
concat : 문자열 붙이기 "ab".concat("cd") =>"abcd"
boolean endsWith :해당 문자열로 끝나는지 검사 "Hello.txt".endsWith("txt") => true

boolean equalsIgnoreCase : 대소문자 구별 없이 같은지 비교
String indent(int n ) : n 만큼 들여쓰기 추가 및 삭제
음수는 삭제 양수는 추가
String replaceFirst(String regex,String replacement) : 일치하는 것 중 첫번째 것만 replacement로 변경

strip :유니코드에 추가된 공백도 제거해줌.(좌우 공백 제거)
StringJoiner : 매개변수를 사용해 새로운 배열 만들어줌

StringJoiner sj = StringJoiner : new StringJoiner("," ,"[" ,"]")
String[] strArr = {"aaa","bbb","ccc"};
for(String s : strArr)
	sj.add(s.toUpperCase());
    // ["AAA","BBB","CCC"]

첫번째 매개변수는 문자열을 구분해주는 매개변수이고 두번째 세번째는 맨앞과 맨뒤를 채워줌.

형식화된 문자열 - foramt,formatted

String str = "%d 더하기 %d는 %d입니다.";
System.out.println(str.formatted(3,5,3+5));
// 3 더하기 5는 8입니다.

StringBuffer

문자열의 내용을 변경가능 변경해도 새로운 객체 생성 안됨.

StringBuffer의 비교

string과 달리 eqauls를 오버라이딩 x (주소비교) == 와 equlas 모두 false나옴
그래서 stringBuffer를 toString()으로 string을 바꿔서 비교해야함.

StringBuffer 메서드

append()

StringBuffer의 마지막에 새로운 내용 추가. 호출 결과가 자기 자신을 반환하여 이어붙일 수 있음.

StringBuffer sb = new StringBuffer("abc");
sb.append("123").append("ZZ");

delete(start,end)

start부터 end 전까지 지움

deleteCharAt(index)

해당 index 삭제

reverse()

stringBuffer 저장된 문자열 거꾸로 나열

setCharAt(index,ch)

지정된 위치의 문자를 주어진 문자로 변경

StringBuild

동기화 기능만 제거 (싱글 쓰레드일 경우 성능 향상)

팩토리 메서드

객체를 생성해서 반환. 생성자 대신 사용하며 객체 캐시가능
valueOf();
Integer i = Integer.valueOf(10)

오토박싱 & 언박싱

오토박싱 : 기본형을 래퍼 클래스로 자동변환
언박싱 : 래퍼 클래스를 기본형으로 자동변환

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10); // 오토박싱 10 -> Integer.valueOf(10)
int value = list.get(0); // 언박싱 Integer.valueOf(10) -> 10

list 에 10을 넣으려면 integer 타입이어야 하는데 그냥 list.add(10) 넣으면 자동변환해줌.
그리고 밑에는 value가 int 타입인데 list.get(0)은 integer타입 10인데 그냥 10으로 자동변환해줌.

profile
나만의 기록장

0개의 댓글