[24.10.03] TIL

yy·2024년 10월 1일

개발일지

목록 보기
116/122

JAVA 공부중

System.out.println(str.charAt(0)+ str.charAt(str.length()-1)); 
// 134
// 158
// 131

알고리즘을 푸는 중 문자열.charAt(0)을 출력했을때는 무리없이 문자가 출력이 되었는데 문자열.charAt(0) + 문자열.charAt(문자열.length()-1)와 같은 값을 출력하려고 보니 아스키코드값으로반환이 되었다.

문자열.charAt의 경우 char형으로 반환이 되는데 그걸 더하면 아스키값이 된다고 한다.

나와야하는 값 앞에 빈 문자열을 추가해서 문자열끼리의 연산임을 표시해주니 원하던 대로 출력이 되었다.

System.out.println(""+ str.charAt(0)+ str.charAt(str.length()-1)); 
//AE
//OO
//AB


제네릭

  • 다형성을 이용하여 코드의 중복성을 제거하고 코드를 재사용할 수 있게되었으나 입력시 실수로 원하는 타입이 들어갈 수 있음. (타입 안전성 떨어짐)
    => 제네릭을 사용하면 코드 재사용과 타입 안전성을 잡을 수 있음.

  • 제네릭 클래스 : <>(다이아몬드)를 이용한 클래스.
    제네릭 클래스를 사용할 때는 타입을 미리 결정하지 않음.
    클래스 오른쪽에 와 같이 선언하면 제네릭 클래스가 됨.
    T는 타입 매개변수라고 함. 나중에 이게 다른 타입으로 변할 수 있음.

  • 생성 시점에 원하는 타입 지정

public class GenericBox<T> {
    private T value;

    public void set(T value) {
        this.value = value;
    }

    public T get() {
        return value;
    }
}
package generic.ex1;

public class BoxMain3 {
    public static void main(String[] args) {
        GenericBox<Integer> integerBox = new GenericBox<Integer>();// 타입 직접 입력 -> 타입 추론으로 new 다음에 오는 Integer를 생략할 수 있다.
        integerBox.set(10);
//        integerBox.set("열"); // Integer타입만 허용
        Integer integer = integerBox.get();
        System.out.println("integer = " + integer);

        GenericBox<String> stringBox = new GenericBox<>(); //타입 추론 : 생성하는 제네릭 타입 생략 가능
        stringBox.set("hello");
//        stringBox.set(111); // String타입만 허용
        String str = stringBox.get();
        System.out.println("str = " + str);
    }
}  
  • 메서드는 매개변수에 인자를 전달해서 사용할 값을 결정
  • 제네릭 클래스는 타입 매개변수에 타입 인자를 전달해서 사용할 타입을 결정

용어

  • 제네릭 : 일반적인, 범용적인 일나느 뜻. 특정타입에 속한 것이 아닌 범용적으로 사용할 수 있다는 뜻

  • 제네릭 타입: 틀래스나 인터페이스를 정의할 때 타입 매개변수를 사용하는 것. (제네릭 클래스, 제네릭 인터페이스 포함)

  • 타입: 클래스, 인터페이스, 기본형을 모두 합쳐서 부르는 말

  • 타입 매개변수 : 제네릭타입이나 메서드에서 사용되는 변수로 실제 타입으로 대체됨.

  • 타입 인자: 제네릭 타입을 사용할 때 제공되는 실제 타임 (GenericBox 에서 Integer)

제네릭 관례

  • E : Element
  • K : Key
  • N : Number
  • T : Type
  • V : Value
  • S,U,V etc : 2nd, 3rd, 4tht types

로 타입(Row Type)

  • <>을 지정 안할수도 있는데 이런걸 로 타입, 원시타입이라고 함.
  • 타입을 지정해서 쓰는게 권장.
GenericBox itegerBox = new GenericBox(); // 아래와 같지만 추후 문제가 생길 수 있음.
GenericBox<Object> itegerBox = new GenericBox<>(); //권장
profile
시간이 걸릴 뿐 내가 못할 건 없다.

0개의 댓글