Java 기초4

이수빈·2023년 8월 7일
0

JAVA

목록 보기
4/4

Object Class

  • java lang 패키지 안에 존재함(기본적인 동작을 수행하는 패키지들임)

  • Object클래스는 모든 자바 클래스의 최고 조상이므로, 모든 클래스는 Object 클래스의 메소드를 사용 할 수 있음

String Class

  • 문자열을 다루는 메소들을 모은 class임.(java.lang 패키지 포함), 불변클래스임

  • String 인스턴스는 한번 생성되면 그 값을 읽기만 할 수 잇고 변경 할 수 없음 (불변객체임)

=> 덧셈 연산자를 이용해 문자열 결합을 수행하면 기존의 문자열이 변경되는 것이 아니라 새로운 String 인스턴스가 메모리에 올라감.

String Buffer Class

  • String Class의 인스턴스는 한번 생성되면 그 값을 변경 할 수 없음

  • String Buffer 클래스의 인스턴스는 값을 변경 할 수도 있고 추가할 수도 있음. 가변클래스임

  • 이를 위해 Buffer가 존재함.

  • append나 insert를 통해 문자열을 초과했을 때 buffer 크기보다 커진 경우 알아서 buffer크기를 늘려준다.

  • 덧셈(+) 연산자를 이용해 String 인스턴스의 문자열을 결합하면, 내용이 합쳐진 새로운 String 인스턴스를 생성합니다. 따라서 문자열을 많이 결합하면 결합할수록 공간의 낭비뿐만 아니라 속도 또한 매우 느려지게 됩니다.
  • StringBuffer 인스턴스를 사용하면 문자열을 바로 추가할 수 있으므로, 공간의 낭비도 없으며 속도도 매우 빨라집니다. 이러한 StringBuffer 클래스는 java.lang 패키지에 포함되어 제공됩니다.

불변클래스 vs 가변클래스

  • 불변클래스를 사용하는 이유 => 멀티스레드 환경에서 객체가 변화되는 상황이라면 불변 인스턴스를 사용하는 것이 좀 더 코드 안정성이 올라간다.(각각의 스레드에서 동시에 자원에 접근해 동기화 문제가 발생가능함)

Wrapper Class

  • primitive type의 데이터를 객체로 type casting 해야할 때 사용함

  • 정수형 => byte, short, int long

  • 실수형 => float double

  • 문자형 => char

Enum Class

  • enum을 비교할 때 실제 값뿐만 아니라 type check도 진행함

  • enum의 상수값이 재정의되더라도 다시 컴파일 할 필요가 없음

Array Class

  • java.util 패키지 안에 존재함(import해야함)

제너릭

  • 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법입니다.이렇게 컴파일 시에 미리 타입 검사(type check)를 수행하면 다음과 같은 장점을 가집니다.

  • 사용이유 => 하나의 클래스의 타입을 정적으로 고정시키는게 아니라, 사용하는쪽에서 동적으로 원하는 type으로 사용하고 싶을 때 제너릭을 사용함 (컴파일시에 타입이 결정됨)

class MyArray<T> {

    T element;

    void setElement(T element) { this.element = element; }

    T getElement() { return element; }

}

MyArray<Integer> myArr = new MyArray<Integer>();
MyArray<Integer> myArr = new MyArray<>(); // 타입 생략가능 Java SE 7부터 가능함.


  • 타입제한 가능

  • 제너릭 메소드 : 선언부에 타입변수를 사용한 메소드임.

class AnimalList<T extends LandAnimal> { ... } // LandAnimal Type만 사용가능

interface WarmBlood { ... }

...

class AnimalList<T extends WarmBlood> { ... } // implements 키워드를 사용해서는 안됨.

class AnimalList<T extends LandAnimal & WarmBlood> { ... }

public static <T> void sort(List<T> list, Comparator<? super T> comp) {
}// 제네릭클래스 타입변수 T와 제네릭 메소드 타입변수 T는 다르게 취급
profile
응애 나 애기 개발자

0개의 댓글