[Day 6| Java] java.lang

y♡ding·2024년 10월 21일
0

데브코스 TIL

목록 보기
29/163

📌 Object 클래스

Object 클래스는 자바의 최상위 클래스로, 자바의 모든 클래스는 Object 클래스로부터 상속받는다. 따라서 모든 클래스Object 클래스에 정의된 메서드를 직접 사용할 수 있다. 이 중 일부는 재정의(Override)할 수 있으며, final로 선언된 메서드는 재정의할 수 없다.

🤞🏻 주요 특징

  • 11개의 메서드만 정의되어 있으며, 멤버변수는 없다.
  • 자바의 모든 객체는 Object 클래스의 메서드를 사용할 수 있다.

✔️ Object 클래스 메서드

  • clone(): 객체 자신의 복사본을 반환.
  • equals(Object obj): 두 객체가 같은 객체인지(주소값을 비교) 판단.
  • hashCode(): 객체의 해시코드를 반환.
  • toString(): 객체 정보를 문자열로 반환.
  • notify(), notifyAll(): 객체를 기다리는 쓰레드를 깨웁니다.
  • wait(): 다른 쓰레드가 notify()notifyAll()을 호출할 때까지 쓰레드를 기다리게 한다.

🗣️ 주요 메서드 설명

  1. equals(Object obj):

    • 두 객체가 같은 객체인지 확인하는 메서드이다. 기본적으로 참조값을 비교하지만, equals 메서드를 오버라이딩하면 객체의 내용값을 비교할 수 있다.
    String s1 = new String("Hello");
    String s2 = new String("Hello");
    System.out.println(s1.equals(s2));  // true - 내용값 비교 (String에서 오버라이딩)
  2. hashCode():

    • 객체의 해시코드를 반환한다. 기본적으로 객체의 메모리 주소를 기반으로 해시코드를 생성한다.
    • String 클래스에서는 문자열 내용이 같으면 동일한 해시코드를 반환하도록 오버라이딩 되어 있다.
  3. toString():

    • 객체의 정보를 문자열로 반환한다. 기본적으로는 클래스 이름과 해시코드(16진수)를 반환하지만, toString을 오버라이딩하면 객체의 내용값을 문자열로 반환할 수 있다.
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

📌 String 클래스

String 클래스불변(Immutable) 클래스이다. 한 번 생성된 String 객체는 값이 변경되지 않으며, 문자열 연산을 할 때마다 새로운 String 객체가 생성된다.

🤞🏻 주요 특징

  • 문자열 리터럴new 연산자로 객체를 생성할 수 있다.
  • 문자열 리터럴은 상수 풀(Constant Pool)에 저장되어 동일한 값이 있으면 재사용된다.
  • + 연산으로 문자열을 결합할 수 있지만, 매번 새로운 객체가 생성된다.

✔️ String 클래스 주요 메서드

  • length(): 문자열의 길이를 반환.
  • charAt(int index): 특정 인덱스에 있는 문자를 반환.
  • substring(int beginIndex): 부분 문자열을 반환.
  • indexOf(String str): 문자열에서 특정 문자의 위치를 반환.
  • replace(String target, String replacement): 문자열 치환.
  • trim(): 문자열 양 끝의 공백을 제거.
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");

System.out.println(str1 == str2);  // true (상수 풀에서 재사용)
System.out.println(str1 == str3);  // false (다른 객체)
System.out.println(str1.equals(str3));  // true (내용 비교)

String formatted = String.format("Hello, %s. You are %d years old.", "John", 25);

📌 StringBuffer와 StringBuilder

StringBufferStringBuilder가변(변경 가능) 객체이다. String과 달리 문자열을 변경할 수 있으며, 메모리 효율성이 좋다. StringBuffer멀티쓰레드 환경에서 안전하지만, StringBuilder동기화가 적용되지 않아 성능이 더 우수하다.

🤞🏻 주요 특징

  • 문자열 변경 가능: 내부적으로 버퍼를 사용해 문자열을 효율적으로 관리.
  • append(): 문자열을 추가할 수 있는 메서드로, 연속적으로 사용할 수 있다.
  • 동기화 여부: StringBuffer는 동기화되어 있어 멀티쓰레드 환경에서 안전, StringBuilder싱글쓰레드 환경에서 빠른 성능을 제공.
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
System.out.println(sb.toString());  // "Hello World"
package com.lang1;

public class StringBuilderEx01 {
    public static void main(String[] args) {
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder(100);  //내부용량
        StringBuilder sb3 = new StringBuilder("Hello StringBuilder");

        System.out.println(sb1.capacity()); // 기본적으로는 16
        System.out.println(sb2.capacity());
        System.out.println(sb3.capacity()); // 데이터를 넣으면 데이터 길이 + 16

        // 문자열의 길이
        System.out.println(sb1.length());
        System.out.println(sb3.length());
        
        // 문자열 추출
        // charAt, subString, indexOf, replace (String은 replaceAll)
    }
}

구분StringStringBufferStringBuilder
속도느림 (불변 객체)빠름 (가변 객체)더 빠름 (가변 객체)
동기화 지원지원하지 않음동기화 지원 (멀티쓰레드 안전)동기화 지원하지 않음 (싱글 쓰레드)
변경 가능 여부변경 불가 (Immutable)변경 가능변경 가능
사용 용도문자열을 자주 변경하지 않을 때멀티쓰레드 환경에서 문자열을 자주 변경할 때싱글 쓰레드 환경에서 문자열을 자주 변경할 때

📌 Math 클래스

Math 클래스수학적 계산에 유용한 static 메서드들을 제공하는 유틸리티 클래스이다.

✔️ Math 클래스 주요 메서드

  • abs(): 절대값 반환.
  • ceil(): 올림값 반환.
  • floor(): 내림값 반환.
  • max() / min(): 두 값 중 최대/최소값 반환.
  • random(): 0 이상 1 미만의 임의의 실수 반환.
  • round(): 반올림값 반환.
System.out.println(Math.ceil(10.5));  // 11.0
System.out.println(Math.floor(10.5)); // 10.0
System.out.println(Math.round(10.5)); // 11
package com.lang1;

public class MathEx02 {
    public static void main(String[] args) {
        // 난수 - 임의의 수(로또 : random)

        // 0 <= 임의값 < 1 double형 실수
        System.out.println(Math.random());
        System.out.println(Math.random());

        // 0 ~ 9까지 정수인 난수
        System.out.println((int)(Math.random() * 10));

        // 1 ~ 45까지의 정수
        // 0 * 45 + 1 <= 임의값 < 1 * 45 + 1 => 정수화
        System.out.println((int)(Math.random() * 45)+ 1);
        System.out.println((int)(Math.random() * 45)+ 1);
        System.out.println((int)(Math.random() * 45)+ 1);
    }
}

📌 Wrapper 클래스

Wrapper 클래스기본 데이터형을 객체로 다룰 수 있게 해준다. Integer, Double, Boolean 등은 각각 int, double, boolean과 대응하는 래퍼 클래스이다. 형변환박싱/언박싱이 가능하다.

🤞🏻주요 특징

  1. 자료형의 크기 확인
  • 각 자료형의 최대값과 최소값을 확인할 수 있다.
  • 예시: Integer.MAX_VALUE, Integer.MIN_VALUE
  1. 형변환 가능
  • 기본 자료형을 객체로 변환하는 박싱(Boxing)과 객체를 기본 자료형으로 변환하는 언박싱(Unboxing)이 가능하다.
  • 자동 박싱(Auto Boxing): 기본 자료형을 자동으로 객체로 변환.
  • 형변환 메서드: byteValue(), shortValue(), intValue() 등으로 객체를 기본 자료형으로 변환할 수 있다.
  1. 문자열 ↔ 정수 변환
  • 문자열을 정수로 변환하거나 정수를 문자열로 변환하는 메서드들을 제공.
  • 예시: Integer.parseInt(), toString()

✔️ Wrapper 클래스 주요 메서드

  • valueOf(): 기본형을 객체로 변환(박싱).
  • intValue() / doubleValue(): 객체를 기본형으로 변환(언박싱).
  • parseInt() / parseDouble(): 문자열을 기본형으로 변환.
Integer i = Integer.valueOf(10);  // 박싱
int n = i.intValue();  // 언박싱
String str = i.toString();  // 정수 -> 문자열
int num = Integer.parseInt("100");  // 문자열 -> 정수

0개의 댓글

관련 채용 정보