본문 바로가기
Today I Learned 2024. 3. 21.

(24.03.21) Java의 정석 학습(인터페이스, 오버라이딩, Comparator&Comparable, 래퍼클라스)

언제 물려있던 코드를 좀 보면선 하나씩 나름 분석하는 시간을 가졌다.

어제는 대충 봐가지곤 지나갔는데 분명 compare써야 하는데 compareTo가 쓰였다거나, implements 관련해서도 아직 자세히 알고 있지 않은 내용이라,

Java의 정석을 토대론 Notion에 정리 + 실습하면서 짰던 코드들을 다시 복기하고, 정리하면서 내 것으로 만들려고 했다.

(노트 정리한 것, 실습한것 양이 많아 TIL에는 간단정리로 대체)

 

생각보다 한번에 이해가 잘 안대고 서로 똑같은 클래스 이름 같은 비슷한 단어가 많고, 읽어야할 이론도 많아서 살짝 시간이 걸렸다.. 내일은 살짝 더 추가 공부를 하고 문제풀이를 이어나갈 수 있도록 해야겠다.

 

이렇게 문제 풀이 + 필요한 부분 학습 이렇게 실전이랑 섞어서 하는게 좀더 배우는데 빠른것 같아서

"Java의 정석"만 가지고 공부하는 계획을 좀 바꿔야할 필요가 있어보인다.


 연습문제 코드 복기 + Java의 정석 학습 간단 정리

관련코드

더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    static class Player implements Comparable {
        // 인스턴스 변수
        int index;
        int power;
        int magicring;

        // 생성자
        public Player(int index, int power, int magicring) {
            this.index = index;
            this.power = power;
            this.magicring = magicring;
        }

        @Override
        public int compareTo(Player other) {
            int totalPower = this.power + (other.power * this.magicring);
            int otherTotalPower = other.power + (this.power * other.magicring);
            return Integer.compare(totalPower, otherTotalPower);
        }
    }

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int total_number = Integer.parseInt(br.readLine());

        // 레슬러들의 순서, 힘, 마법반지 내용의 새로운 배열 만들기
        Player[] players = new Player[total_number]; // public 클래스라 새롭게 지정, 배열로 지정 가능
        for (int i = 0; i < total_number; i++) {
            String[] playerInfo = br.readLine().split(" "); //매개변수로 넣은 것
            int power = Integer.parseInt(playerInfo[0]);
            int magicring = Integer.parseInt(playerInfo[1]);
            players[i] = new Player(i, power, magicring);
        }

        Arrays.sort(players); // compareTo 반환값 기준으로 정렬

        for (int i = players.length - 1; i >= 0; i--) {
            System.out.println(players[i].index+1);
        }

        br.close();
    }
}

Interface

  • 추상메서드를 가지고 있지만 추상화가 일반적인 추상클래스보다 높은것
  • 다른 클래스 작성에 도움을 주는 목적
  • 클래스에extends로 상속, implements로 구현

 

Comparator & Comparable

  • 선언 형태만 다르지 어떤 두 객체를 비교하는 기능을 목적의 인터페이스
  • compareTo에 입력될 때는, (정렬이 필요한 객체 other)로 입력하면 보기 더 쉬움

 

오버라이딩 overriding

  • 조상 클래스로 부터 상속받은 메서드의 내용을 변경
  • **추가적으로 조건 등의 자세한 공부 필요

 

래퍼 클래스

  • Java에서 객체지향 개념으로 모든 것을 객체 그 자체로 다루워야 하지만 성능을 위해 8개 기본형 객체를 다루지 않음
  • Primitive 변수들도 객체로 다뤄야하는 경우가 생길 때(매개변수로 객체를 요구할 때 등) 객체로 변환해야할 필요가 있을 때 사용하는 클래스
    • Boolean, Character, Byte, Short, Integer, Long, Float, Double 총 8개 사용

 

이 외에 제네릭스 , 열거형, 애너테이션은 내일 이어서 완성을 시켜서 나름 primitive 변수만 쓴 코드보다는 클래스도 사용하면서 좀 코드처럼 보이는 코드를 짤 수 있게 하는 것이 목적..


본 캠프에 들어가면 이론적인 부분을 읽고, 실습하고 내것으로 만드는 게 좀 어려울 것 같아서 조금 시간이 걸리는 게 흠이지만 확실히 하고싶은 욕심이 있다.

어제도 밤 늦게까지 코드 짜고 확인하고 하느라 좀 기진맥진이라 저번주부터 계속 신경쓰고 있는 체려관리가 좀 안되는 듯..

그래도 남들이 하는건 두배로 한다곤 생각하고 더 힘낼 순 있도록!