100일 챌린지/빅데이터기반 인공지능 융합 서비스 개발자

Day09 - Wrapper 클래스

ksyke 2024. 8. 1. 12:35

목차

    Wrapper 클래스

    • 기본 타입에 해당되는 Wrapper 클래스가 있다.
    • Wrapper 클래스는 Object 클래스와 객체의 중간 매개체 연결을 한다.
      • Object는 모든 참조변수를 받아낼 수 있기 때문에
    • => 다양한 타입을 파라미터로 받기가 가능해진다.
      • 기본자료형(int, float, String 등)이 부모타입(Object)으로 캐스팅이 가능해진다.
      • 기본자료형의 특성과 기능의 표현이 가능해진다. (Integet.parseInt()를 통한 인티저 사용 가능)
    public class Ex01 {
    
        public static void main(String[] args) {
            func01(new Ex01());
            func01(1111);
            func01(3.14);
            func01(new Double(3.14)); // 원칙적으로 불가능하지만 자동 박싱을 통해 가능해진다.
        }
        public static void func01(Object a) {
            System.out.println(a);
        }
    }

    Integer

    // 10진수 정수타입
    int su1 = 1111;
    Integer su2 = new Integer(2222);
    System.out.println(su2 + su1);
    
    Integer su3 = new Integer("3333");
    System.out.println(su3 + 1);
    
    Integer su4 = 4444; // 오토박싱 - 객체화
    System.out.println(su4 + 1);
    
    Integer su5 = new Integer(5555); // 언박싱 
    System.out.println(su5 + 1);
    
    System.out.println(Integer.MIN_VALUE); // -2147483648
    System.out.println(Integer.MAX_VALUE); // 2147483647
    System.out.println(Integer.SIZE + "bit"); // 32bit
    System.out.println(Integer.SIZE / 8 + "byte"); // 4byte
    
    int su6 = Integer.parseInt("6666");
    System.out.println(su6 + 1);
    
    Integer su7 = Integer.valueOf("128");
    System.out.println(su7 + 1);
    
    byte su8 = su7.byteValue();
    System.out.println(su8); // -128
    
    int tmp1 = 1111;
    Integer tmp2 = new Integer(1111);
    Integer tmp3 = new Integer("1111");
    System.out.println(tmp1 == tmp2); // true
    System.out.println(tmp1 == tmp3); // true
    System.out.println(tmp2 == tmp3); // false
    System.out.println(tmp2.equals(tmp3)); // true
    System.out.println(tmp2.equals(1111)); // true (1111은 Integer로 박싱이 일어난 후 계산된다.)
    
    System.out.println(Integer.sum(1, 2)); // int의 sum을 반환
    
    int su9 = 2222;
    System.out.println(su9 + "의 2진수: " + Integer.toBinaryString(su9)); // 100010101110
    System.out.println(su9 + "의 8진수: " + Integer.toOctalString(su9)); // 4256
    System.out.println(su9 + "의 16진수: " + Integer.toHexString(su9)); // 8ae
    
    int tmp = 0xf;
    System.out.println(tmp + "의 2진수: " + Integer.toBinaryString(tmp)); // 1111
    System.out.println(tmp + "의 8진수: " + Integer.toOctalString(tmp)); // 17
    System.out.println(tmp + "의 16진수: " + Integer.toHexString(tmp)); // f
    
    System.out.println(Integer.parseUnsignedInt("10", 2)); // 2
    System.out.println(Integer.parseUnsignedInt("10", 8)); // 8
    System.out.println(Integer.parseUnsignedInt("10", 10)); // 10
    System.out.println(Integer.parseUnsignedInt("10", 16)); // 16
    
    System.out.println(su2.compareTo(-56)); // 1 (차이를 반환한다.)
    System.out.println(Integer.compare(1, 3)); // 작으면 -1, 같으면 0, 크면 1을 반환

    Byte

    
    Byte su1 = new Byte("127");
    // Byte su2 = new Byte(127); // 127은 int타입이기 때문에 불가
    Byte su3 = 127;
    Byte su2 = new Byte(su3); 

    Long

    Long su4 = new Long("1234");
    Long su5 = new Long(1234); // 오토캐스팅으로 가능하게 됨
    Long su6 = new Long(1234L); // 수동캐스팅

    Double

    Double su1 = 3.14;
    Double su2 = new Double("3.14");
    
    System.out.println(su2);
    Double su3 = new Double(3.14);
    System.out.println(su3);
    
    Double su4 = new Double(3);
    System.out.println(su4);
    
    Double su5 = new Double("12");
    System.out.println(su5);
    
    double su6 = su5;
    Double su7 = su6;
    System.out.println(su7);
    
    double su8 = Double.parseDouble("3.14");
    System.out.println(su8);
    
    su1 = 2.0;
    su2 = 0.0;
    double su9 = su1 / su2;
    System.out.println(Double.isInfinite(su1/su2)); // true
    System.out.println(su9); // infinity
    
    su1 = 0.0;
    su2 = 0.0;
    su9 = su1 / su2;
    System.out.println(Double.isInfinite(su1/su2)); // false
    System.out.println(Double.isNaN(su1/su2)); // true
    System.out.println(su9); // NaN

    Float

    Float su1 = new Float("3.14");
    Float su2 = new Float(3.14F); // float을 매개변수로 받음
    Float su3 = new Float(3.14); // Double을 매개변수로 받음 
    System.out.println(su2);

    Boolean

    boolean boo1 = true;
    Boolean boo2 = new Boolean("true");
    Boolean boo3 = new Boolean("TRUE");
    Boolean boo4 = new Boolean(true);

    Number

    • Number는 실수와 정수 클래스의 상위 객체이다.
    • 추상클래스여서 객체 생성이 안된다.
    public static void main(String[] args) {
    
      //    Number num = new Number(); // 생성 불가능
      Number num1 = new Integer(1);
      Number num2 = new Double(3.14);
    
      System.out.println(num1.intValue() + num2.doubleValue());
    
      Number num3;
      num3 = 1;
      System.out.println(num3); // 1 (integer)
      num3 = 1.0 + 1;
      System.out.println(num3); // 2.0 (double)
    
      System.out.println(div(6, 3)); // 2
      System.out.println(div(3, 5)); // 0.6
    }
    
    public static Number div(int a, int b) {
        if(a % b != 0) return 1.0 * a / b;
        return a / b;
    }

    Char

    char ch1 = 'A';
    Character ch2 = new Character(ch1);
    Character ch3 = new Character('a');
    Character ch4 = new Character((char)97); // a
    
    char ch5 = 'a';
    System.out.println("Java에서 사용 가능한 문자인가 :  " + Character.isLetter(ch5)); // true
    
    System.out.println("언어 문자인가 : " + Character.isJavaLetter(ch5)); // true (deplicates)
    System.out.println("언어 문자인가 : " + Character.isDefined(ch5)); // UNICODE인지 확인
    System.out.println("언어 문자인가 : " + Character.isAlphabetic(ch5)); // true
    System.out.println("숫자인가 : " + Character.isDigit(ch5)); // false
    
    // => 둘 다 false일 경우 특수문자
    char tmp = ' ';
    System.out.println("공백인가 : " + Character.isSpace(tmp)); // (deplicated)
    System.out.println("공백인가 : " + Character.isWhitespace(tmp));
    
    // 계행의 경우
    System.out.println("유닉스 \n");
    System.out.println("윈도우 \r \n");
    System.out.println("----");

    String (StringBuilder)

    String msg1 = "java";
    String msg2 = new String("java");
    
    // 둘의 차이점은 스레드의 안정성
    StringBuilder msg3;
    StringBuffer msg4;
    
    msg3 = new StringBuilder("ja");
    System.out.println(msg3 + "va");
    //    StringBuilder msg5 = msg3 + " spring"; // String와 연산하면 String이 되기 떄문에 수행할 수 없다.
    
    // String과 달리 새로운 객체를 만들지 않고 자기자신을 반환한다. 
    StringBuilder msg6 = msg3.append("va"); // java
    System.out.println(msg6);
    
    StringBuilder msg7 = msg3.append("2");  // java2
    System.out.println(msg7);
    
    StringBuilder sb = new StringBuilder("Java");
    sb.append(" DB");
    sb.append(" Web");
    sb.append(" Spring");
    
    System.out.println(sb);
    
    // 수정하기
    sb.replace(5, 7, "DataBase");
    System.out.println(sb);
    
    // 삭제하기
    sb.delete(14, 18);
    System.out.println(sb);
    
    // 추가입력
    sb.insert(14, "WEB ");
    System.out.println(sb);
    
    // 인덱스찾기
    System.out.println(sb.charAt(3));
    System.out.println(sb.indexOf("Data")); // 5 (Java DataBase WEB Spring)
    
    // 배열로 받기 
    char[] arr1 = new char[sb.length()];
    sb.getChars(0, sb.length(), arr1, 0);
    System.out.println(java.util.Arrays.toString(arr1));
    
    // 뒤집기
    sb.delete(4, sb.length());
    sb.reverse();
    System.out.println(sb);
    
    // Char 바꾸기
    sb.setCharAt(0, 'A');
    System.out.println(sb);
    
    // 문자 붙이기
    String msg1 = "java";
    String msg2 = " web";
    char[] arr1 = new char[msg1.length() + msg2.length()];
    char[] arr2 = msg1.toCharArray();
    char[] arr3 = msg2.toCharArray();
    System.arraycopy(arr2, 0, arr1, 0, arr2.length);
    System.arraycopy(arr3, 0, arr1, arr2.length, arr3.length);
    msg1 = new String(arr1);
    System.out.println(msg1);
    
    // 메모리 증량 : 16 -> 34(17*2) -> 70(35*2) -> 142(71*2)
    StringBuffer sb = new StringBuffer();
    System.out.println(sb.length()); // 0
    System.out.println(sb.capacity()); // 16 (메모리는 항상 초기입력수+16)
    
    for(int i = 0; i < 17; i++) sb.append("a");
    System.out.println(sb.length()); // 17
    System.out.println(sb.capacity()); // 34
    
    // 메모리 사이즈 잘라내기
    sb.trimToSize();
    System.out.println(sb.capacity()); // 17
    
    // 초기 메모리사이즈 설정하기 
    StringBuffer tmp = new StringBuffer(6);
    System.out.println(tmp.length());
    System.out.println(tmp.capacity()); // 6