ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 17일차 - 자바의 기본 클래스, 배열의 정렬 및 탐색
    AI 솔루션 개발자과정(Java, Python) 2022. 11. 1. 17:31

    인스턴스 복사 : colne 메소드

    Object 클래스에 정의되어 있는 clone 메소드가 호출되면 인스턴스의 복사가 이뤄진다.

    클래스 정의 시, clone 메소드의 호출을 허용하려면 clonealbe 인터페이스를 구현해야 한다.

    cloneable 인터페이스는 구현해야 할 추상 메소드가 없는 마커 인터페이스다.

     

    자바의 복사 작업은 두 가지로 구분한다.

    얕은 복사(shallow copy) : 참조하는 값은 동일한데, 이름만 추가된 것 / 프로그램 바로가기 만들기.

    깊은 복사(deep copy) : 참조하는 변수도 추가하고, 참조할 기본 값도 추가된 것. / 복사하기

     

     

    String 인스턴스 대상 복사

    깊은 복사가 가능하지만, 원본을 수정할 수 없어서 얕은 복사를 해도 된다.

     

     

    clone 메소드의 반환형 수정.

    clone 메소드는 기본적으로 Object를 내보내고, 별도의 형 변환이 필요 없다.

     

     

    자바의 기본 클래스

    기본 자료형의 값을 감싸는 래퍼 클래스

    기본 자료형의 값을 인스턴스로 감싸는 목적의 클래스를 가리켜 래퍼 클래스라 한다.

    감싸는 것을 박싱(Boxing), 벗기는 것을 언박싱(Unboxing)이라 한다.

     

    래퍼 클래스의 종류와 생성자.

    Boolean       public Boolean(boolean value)
    Character    public Character(char value)
    Byte             public Byte(byte value)
    Short           public Short(short value)
    Integer        public Integer(int value)
    Long           public Long(long value)
    Float           public Float(float value), public Float(double value)
    Double       public Double(double value)

    언박싱 메소드의 종류와 이름

    Boolean      public boolean booleanValue()
    Character   public char charValue()
    Integer        public int intValue()
    Long           public long longValue()
    Double       public double doubleValue()

    오토 박싱과 오토 언박싱

    Number 클래스

    java.lang.Number

    모든 래퍼 클래스가 상속하는 클래스이다.

     

    java.lang.Number에 정의된 추상 메소드들

       public abstract int intValue()
       public abstract long longValue()
       public abstract double doubleValue()

         즉 래퍼 인스턴스에 저장된 값을 원하는 형의 기본 자료형 값으로 반환할 수 있다.

     

     

    별도의 형 변환 없이 강제 형 변환이 포함되어있다.

     

     

    래퍼 클래스의 다양한 static 메소드들

    Integer.max(n1, n2)  => 둘 중 큰수
    Integer.min(n1, n2)  => 둘 중 작은수
    Integer.sum(n1, n2)  => 두 수의 합

    Integer.toBinaryString(12)  => 12를 2진수로 변환.
    Integer.toOctalString(12)  => 12의 8진수 변환
    Integer.toHexString(12)  => 12의 16진수 변환

     

    BigInteger 클래스와 BigDecimal 클래스

    매우 큰 정수 표현 위한 java.math.BigInteger 클래스

    기본 자료형으로 표현할 수 있는 정수의 범위는 제한적이다.

    대략 922경이다. 단 1이라도 높아지면 long의 범위를 벗어났다고 오류가 뜬다.

    이때 사용하는 것이 BigInteger 클래스이다.

    BigInteger의 매개변수로는 문자열이 와야 한다.

    정수의 한계값을 넘은 수이기 때문에 문법오류가 발생한다.

     

    BigInteger의 메소드

    n1.add(n2)         => BigInteger 기반 덧셈 연산
    n1.multiply(n2)   => BigInteger 기반 곱셈 연산

    n1.intValueExact() => 인스턴스에 저장된 값을 int 형 정수로 반환.

    BigInteger 값을 인트 정수로 반환할 수 있긴 하나, 너무 크면 예외가 발생한다.

     

    오차 없는 실수 표현 위한 BigDecimal 클래스

    기본 자료형의 실수 표현은 정확한 실수 표현이 아니기 때문에, 실수형 자료를 문자형 자료로 반환한 후 연산하여 오차 없는 실수를 표현한다.

     

    Math 클래스와 난수의 생성, 그리고 문자열 토큰의 구분

    수학 관련 연산 기능을 제공하는 Math 클래스

    java.lang.*   자바 컴파일러에 의해 자동으로 추가되는 패키지들.
    Math 패키지 또한 기본 클래스이다.
    또한 기능 제공을 목적으로 설계 되었기에 대부분 멤버는 static으로 구성되어 있다. 

    Math.PI                                          => 원주율
    Math.sqrt(n)                                  => n의 제곱근
    Math.toDegrees(Math.PI)             => 파이에 대한 각
    Math.toDegrees(2.0 * Math.PI)     => 2 파이에 대한 각



    Math.toRadians(45)                       => 라디안으로 변환한다.
    Math.sin(radian45)                        => 싸인45
    Math.cos(radian45)                       => 코싸인45
    Math.tan(radian45)                        => 탄젠트45
    Math.log(25)                                   => 로그25
    Math.pow(2, 16)                             => 2의 16승

     

     

    난수의 생성(Random)

    Random rand = new Random(seed); =>     seed 입력값에 정해진 패턴에 따라 난수를 생성한다.
            System.currentTimeMillis() 를 seed에 아무 값도 넣지 않았을 때의 기본값이다.
       public boolean nextBoolean()          =>    boolean형 난수 반환
       public int nextInt()                            =>    int형 난수 반환
       public long nextLong()                     =>   long형 난수 반환
       public int nextInt(int bound)             =>   0 이상 bound 미만 범위의 int형 난수 반환
       public float nextFloat()                     =>   0.0 이상 1.0 미만의 float형 난수 반환
       public double nextDouble()              =>   0.0 이상 1.0 미만의 double형 난수 반환

     

    문자열의 토큰 구분.

    파이썬의 sprit() 함수와 같다.

    StringTokenizer로 토큰과 구분자를 지정하여 나누고, hasMoreTokens로 남아있는 토큰을 확인한다.

    nextToken 으로 다음 토큰을 출력하는데, 반복문을 이용하여 차례대로 출력할 수 있다.

     

     

     

    Arrays 클래스의 배열 복사 메소드

    Arrays 의 static 메소드인 equals 에 참조 데이터가 전달되면, 참조 데이터 간의 주소비교가 이루어진다.

    따라서 비교할 참조 데이터의 equals 오버라이딩이 필요하다.

     

     

     

    배열의 정렬: Arrays 클래스의 sort 메소드

    오름차순 정렬

    수의 경우, 오름차순 정렬에 대한 기준이 명확하다. 

    하지만 참조 자료간의 정렬은 기준이 없다. 그래서 클래스를 정의할 때, 오름차순의 순서 상 크고 작음의 기준을 정의해야 한다.

    기준으로는 사람들로 잡자면 나이, 몸무게, 키 등 기준을 정해 주어야 한다.

     

     

    compareTo 메소드 정의 기준

     

    CompareTo 오버라이딩의 특징

    같으면 무조건 0을 반환해야한다.

    더 큰것이 뒤로 가기 원한다면 양수를 반환한다.

     

     

    내림차순 정렬은 음수와 양수의 조건을 반대로 바꾸면 된다.

     

     

     

     

    배열의 탐색: 기본 자료형 값 대상

    배열을 탐색할 때는 인덱스순서로 찾는건 너무 비효율적이다.

    그래서 만들어진 것이 이진 탐색이다. 이진 탐색의 조건은 탐색전에 데이터들이 오름차순으로 정렬되야 한다.

    이진 탐색은 배열의 중간을 잘라서  그 수를 찾는 수와 비교를 해보고 큰배열과 작은배열로 나눠서 해당하는 배열을 다시 탐색하여 범위를 좁혀나간다.

     

     

    배열의 탐색: 인스턴스 대상

     

     

     

Designed by Tistory.