Backend/Java

[java]java.lang 패키지

해로몬 2024. 10. 21. 17:29

:복습

<JAVA Program 문법>

  • 기본 프로그램 문법
    • 자료구조
      • 자료형
        • 기본자료형 배열
      • 변수 / 상수
      • 연산자
      • 형변환
    • 흐름제어
      • 조건에 의한 분기
      • 조건에 의한 반복
      • 기타 제어
  • 객체 문법 : 한 개의 클래스
    • 패키지
      • package
      • import
      • 패키지 컴파일
    • 클래스
      • interface
        • implement / extends
        • 상수
        • 추상메서드
        • default / static / private 메서드
      • 일반클래스 / 추상클래스
        • 멤버 필드
          • 인스턴스 / 클래스(static)
        • 메서드
          • 인스턴스 / 클래스(static)
          • 추상메서드
          • 오버로딩
          • 가변인자
          • 메인메서드
          • constructor
  • 객체지향 프로그램 문법 :상속,은닉,추상,다형
    • 은닉
      • 접근지정자
      • setter / getter
      • this / this()
    • 상속
      • extends / implements
      • overriding
      • super / super()
      • final
    • 다형
      • 참조 자료형 형변환
      • instanceof
    • 추상
      • 추상클래스
      • 인터페이스
  • 객체 모델링(diagram)
    • UML
      • Class Diagram                           : 클래스 간의 관계
      • Sequence Diagram                   : 메서드 간의 흐름
      • Use Case Diagram                    : 동작의 흐름

  • 라이브러리(목적을 위해서 제공되는 클래스) : API -> jar(Java Archiver)
    • jar
      •  pacakge
        • class
    • 내장 라이브러리
      • Oracle
    • 외부 라이브러리(Third Party)
      • 각 벤더

API(Application Programming Interface)

 

java.lang 패키지 ( import 없음)

 

Object : 모든 클래스의 상위 클래스

  • 모든 클래스는 Object 클래스에서 상속받음.
  • 모든 클래스는 Object 클래스의 메서드 사용 가능
  • 모든 클래스는 Object 클래스의 메서드 중 일부는 재정의 할 수 있음
  • 단, final로 선언된 메서드는 재정의 할 수 없다!!
  • 컴파일러가 extends Object를 추가
public static void main(String[] args) {
        String string = new String("Hello");
        System.out.println(string.toString());

        //Object - toString : 참조값
        // => 오버라이딩(재정의)
        //String - toString : 내용값
        
        Person person = new Person();
        //person = person.toString() 똑같다.
        System.out.println(person.toString());
        System.out.println(person);
    }
    
    
 //묵시적 Object 상속
public class Person {
    //extends Object가 생략되어 있음. ->컴파일러가 추가시킴

    @Override
    public String toString() {
        return "Hello World";
    }
}
  • toString 메서드
    • 객체를 문자열로 표현하는 메서드
public class Person {
    private int id;
    private String name;
    private int age;
    
 public Person(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Person{" + "id = "+id + ", name= " + name + ", age= " +age + "}";
    }   
    
    public static void main(String[] args) {
        String string = new String("Hello");
        System.out.println(string.toString()); //결과값 Hello

        Person person = new Person(111,"홍길동", 30);

        //person = person.toString() 똑같다.
        System.out.println(person.toString());//결과값 : Person{id = 111, name= 홍길동, age=30}
        System.out.println(person);//결과값 : Person{id = 111, name= 홍길동, age=30}
    }
}

 

    •  
  • toString()의 주요 사용 사례
    • 디버깅과 로깅
      • toString() 메서드는 주로 디버깅 로그 기록에서 유용하게 사용됩니다. 객체의 상태를 쉽게 확인하고, 코드의 흐름을 파악하는 데 도움을 줍니다.
    • 객체의 직관적 표현
      • 사용자 정의 클래스에서 toString()을 오버라이딩하면, 객체를 보다 직관적으로 표현할 수 있습니다. 예를 들어, 데이터베이스 레코드 사용자 정보 등을 출력할 때 객체의 속성을 문자열로 변환하여 더 쉽게 읽을 수 있습니다.
    • 컬렉션 출력
      • 자바의 컬렉션 클래스(ArrayList, HashMap 등)는 내부에 저장된 객체들의 toString() 메서드를 호출하여 출력합니다. 객체의 toString() 메서드를 오버라이딩하면, 컬렉션에 포함된 객체들도 가독성 있게 출력됩니다.
  • equals() 메서드
//기본 equals()구현
public boolean equals(Object obj) {
    return (this == obj);
}

오버라이딩 : 객체의 논리적 동등성을 비교할 때는 equals() 메서드를 오버라이딩하여 객체의 속성 값을 비교

public class ObjectEx03 {
    public static void main(String[] args) {
        //동등비교
        int a = 10;
        int b = 20;
        
        //내용값 비교
        System.out.println(a==b);//false

        //내용값 - 참조값 비교
        Object o1 = new Object();
        Object o2 = new Object();
        System.out.println(o1 == o2);//false
        
        //내용값 - 데이터
        System.out.println(o1.equals(o2));//false

        String s1 = new String("Hello");
        String s2 = new String("Hello");
        
        //참조값
        System.out.println(s1 == s2);//false
        
        //내용값 - 오버라이딩
        System.out.println(s1.equals(s2));//true
		}

    }
  • hashCode() 메서드
    • 객체를 고유하게 식별할 수 있는 정수 값으로, 같은 객체는 동일한 해시코드를 가져야 함.
@Override
public int hashCode(){
	return Objects.hash(name,age); //속성값을 기반으로 해시코드 생성
}

 

equals()와 hashCode()의 관계

equlas()를 오버라이딩하면 반드시 hashCode()도 오버라이딩해야 함. 같은 객체라면 같은 해시코드를 반환해야 하기 때문.

 

[String 클래스와 메서드]

String 클래스는 Java에서 문자열을 처리하기 위한 클래스이다.

문자열은 객체로 관리되며, 자바에서 가장 많이 사용되는 클래스 중 하나

 

  • length() :문자열 길이 반환
  • charAt(int index) : 특정 인덱스의 문자 반환
  • substring(int beginIndex, int endIndex) : 문자열의 일부를 잘라서 반환
  • indexOf(String str) : 특정 문자열이 처음 나타는 인덱스를 반환. (문자열이 없으면 -1 반환)
  • lastIndexOf(String str) : 특정 문자열이 마지막으로 나타나는 위치의 인덱스를 반환(문자열이 없으면 -1 반환)
  • contains(CharSequence s) :특정 문자열 유무확인 
  • startsWith(String prefix) : 특정 접두사로 시작하는지 확인
  • endsWith(String suffix) : 특정 접미사로 끝나는지 확인
  • 문자열 변환
    • toLowerCase() : 소문자 변환
    • toUpperCase() : 대문자 변환
    • trim() : 양쪽 공백 제거
    • valueOf(primitive data type) : 문자열로 반환
  • 문자열 조작
    • concat(String str) : 문자열 연결
    • replace(char oldChar, char newChar) :특정 문자를 다른 문자로 대체
    • replaceAll(String regex, String replacement) : 정규표현식에 맞는 문자열을 찾아 대체
    • substring(int begin) :해당 인덱스부터 끝까지의 문자열을 반환
    • substring(int beginIndex, int endIndex) : 시작 인덱스부터 끝 인덱스 전까지의 부분 문자열 반환
  • 형식화된 출력
    • format(String format, Object... args) : 형식화된 문자열을 생성할 수 있음
      • % s :문자열
      • % d :정수
      • % f :실수

 

[String/StringBuffer/StringBuilder]

  • String
    • 문자열이 자주 변경되지 않는 경우나 리터럴 문자열을 재사용해야 할 때 적절, 문자열을 자주 수정하지 않을 때 적합
  • StringBuffer
    • 멀티스레드 환경에서 문자열을 빈번하게 수정해야 할 때, 문자열 수정 시 동기화가 필요할 때
  • StringBuilder
    • 단일 스레드 환경에서 문자열을 자주 수정해야 할 경우, 동기화가 필요 없는 상황에서 StringBuffer보다 빠름.
특징 String StringBuffer StringBuilder
선언방식 String str ="Hello'; StringBuffer sb = new StringBuffer("Hello"); StringBuilder sb = new StringBuilder("Hello");
문자열 변경 방법 불변 가변 가변
동기화 ⭕️
성능 상대적으로 느림 상대적 느림 성능 빠름
사용 목적 문자열이 자주 변경되지 않을 때 적합 멀티스레드 환경에서 문자열이 자주 변경될 때 적합 단일 스레드 환경에서 문자열이 자주 변경될 때 적합
불변성 여부 불변 객체 가변 객체 가변 객체
멀티스레드 지원 ⭕️
메모리 사용 변경 시마다 새로운 객체가 생성되므로 비효율적 메모리 효율적 사용 메모리 효율적 사용
주요 메서드 concat(),
substring(),
charAt()
append(), insert(),
delete(),reverse()
append(), insert(),
delete(),reverse()

 

 

-StringBuilder

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuilder.html

 

StringBuilder (Java SE 17 & JDK 17)

All Implemented Interfaces: Serializable, Appendable, CharSequence, Comparable A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in

docs.oracle.com

 

 

-StringBuffer

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html

 

StringBuffer (Java SE 17 & JDK 17)

All Implemented Interfaces: Serializable, Appendable, CharSequence, Comparable A thread-safe, mutable sequence of characters. A string buffer is like a String, but can be modified. At any point in time it contains some particular sequence of characters, bu

docs.oracle.com

 

  • Math 라이브러리
    • abs(x) : 절댓값 반환
    • min(a, b) : 두 값 중 작은 값 반환
    • max(a, b) : 두 값 중 큰 값 반환
    • pow(a, b) :a의 b제곱
    • sqrt(a) :제곱근 반환
    • round(a) : 반올림
    • ceil(a) :올림
    • floor(a) :내림
    • log(a) :자연로그
    • log10(a) :밑이 10인 로그 반환
    • sin(a) :사인 값 반환
    • cos(a) :코사인 값 반환
    • tan(a) :탄젠트 값 반환
  • Math.random() :double탑인 난수 반환 
    • 반환되는 값 : 0.0 <= X <1.0 범위에 속하는 소수
    • 범위 조정
      • 0부터 10까지 난수
int randomValue = (int) (Math.random() * 10);  // 0 <= 값 < 10 (정수형 난수)
System.out.println(randomValue);

 

    • 1부터 45까지 난수
int randomValue = (int) (Math.random() * 45) + 1;  // 1 <= 값 <=45
System.out.println(randomValue);

 

[Wrapper 클래스]

기본 자료형 Wrapper 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
  • 필요성
    • 객체로 다루기: 기본 자료형은 객체가 아니기 때문에, 컬렉션 클래스(ArrayList, HashMap 등) 같은 곳에서는 사용할 수 없습니다. Wrapper 클래스를 통해 기본 자료형을 객체로 변환하면 객체로 다룰 수 있는 기능을 제공할 수 있습니다.
    • 유틸리티 메서드 제공: 각 Wrapper 클래스는 기본 자료형에 없는 유용한 메서드들을 제공합니다. 예를 들어, Integer 클래스는 문자열을 정수로 변환하는 parseInt() 메서드를 제공합니다.
    • 형 변환 지원: Wrapper 클래스는 기본 자료형 간의 형 변환이나 타입 변환을 더 쉽게 수행할 수 있는 기능도 제공합니다.
  • 오토박싱(Auto-Boxing)과 오토언박싱(Auto-Unboxing)
    • 자바 컴파일러가 자동으로 박싱과 언박싱 처리 ➡️ 오토박싱과 오토언박싱
    • 즉, 개발자가 명시적으로 변환하지 않아도, 기본 자료형과 Wrapper 클래스 간의 변환이 자동으로 이루어 짐.
int a = 10;

// 오토박싱: 기본 자료형 int를 Integer 객체로 자동 변환
Integer wrappedA = a;

// 오토언박싱: Integer 객체를 int 값으로 자동 변환
int b = wrappedA;