(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 변수만 쓴 코드보다는 클래스도 사용하면서 좀 코드처럼 보이는 코드를 짤 수 있게 하는 것이 목적..
본 캠프에 들어가면 이론적인 부분을 읽고, 실습하고 내것으로 만드는 게 좀 어려울 것 같아서 조금 시간이 걸리는 게 흠이지만 확실히 하고싶은 욕심이 있다.
어제도 밤 늦게까지 코드 짜고 확인하고 하느라 좀 기진맥진이라 저번주부터 계속 신경쓰고 있는 체려관리가 좀 안되는 듯..
그래도 남들이 하는건 두배로 한다곤 생각하고 더 힘낼 순 있도록!
'Today I Learned' 카테고리의 다른 글
(24.03.25) Java의 정석 학습(지네릭스) (0) | 2024.03.25 |
---|---|
(24.03.22) Java의 정석 학습(예외처리 exception handling) (0) | 2024.03.22 |
(24.03.20) 연습문제 오류 해결 도전 (0) | 2024.03.20 |
(24.03.19) 미션_아티클스터디&용어정리(다른카테고리) / Java의 정석 + 백준 (0) | 2024.03.19 |
(24.03.18) CS강의 마무리 + 문제 연습 세팅 + 기타 미션 (0) | 2024.03.18 |