오늘은 주특기 Spring 주차에 들어갔다. 사전 과제로 S.A.를 받아 해결하는데 생각했던거 보다 좀 어려웠다. 인터페이스와 추상클래스를 활용해서 구현하는게 생각보다 좀 어렵다. 오늘 TIL에서는 S.A.에서 고민을 했던 부분을 정리해보려한다.
문제 : 버스 객체 생성시 버스 번호는 고유값으로 생성해야한다.
시도
우선 set을 이용해 번호 중복 생성을 막아보고자 했다.
Bus 클래스의 생성자 안에 HaseSet을 만들어 중복으로 생성되는 번호가
저장되지 않게 만들어 봤으나 중복 번호도 그대로 통과 되었다.
이유를 생각해보니 인스턴스가 새로 생성될 때마다 Hashset도 인스턴스별로
따로 생성되어서 되지 않았던 것이다.
그래서 HashSet을 인스턴스별로 생기지 않게 하기 위해
버스 클래스의 static 변수로 선언하고 나머지는 동일한 방식으로 진행해보았다.
public class Bus extends Transportation implements Change {
// 변수
static Set<Integer> numSet = new HashSet<Integer>();
// 생성자
Bus(int busNumber) {
super();
state = "운행";
maxPassengers = 30;
basicFare = 1000;
if (!numSet.add(busNumber)) { // 고유값 생성?
System.out.printf("%d번은 이미 존재하는 버스 번호입니다.%n
새로운 버스 번호를 지정해주세요.%n",busNumber);
} else {
numSet.add(busNumber);
plateNumber = busNumber;
System.out.printf("%d번 버스객체 만들어짐!%n",plateNumber);
}
}
이렇게 구현을 하니 인스턴스 별로 생성되는 고유번호가 중복되지 않게
static numSet에서 관리가 되어서 잘 진행이 되었다.
그리고 set에 중복된 값을 넣을 시 false를 반환한다는 것을 이용해서
if (!numSet.add(busNumber)) 이렇게 구성해봤는데 이 부분은 잘 활용한 것 같다.
인텔리제이 오버라이딩(Overriding) 단축키 :
ctrl + i
인텔리제이 생성자 단축키 :alt + insert 누르고 shift로 한방에 지정
해당라인복사 : ctrl + D
최근 파일 : ctrl + E
단계별 커서 이동 : ctrl + 좌우 방향키
오류난 부분으로 바로이동 : F2
전체검색+대체(replace) : crtl + shift + R
자동완성라이브템플릿 : ctrl + J
전체검색 : ctrl + h
코드한줄 or 선택영역을 한줄 위로 이동 : Ctrl + Shift + ↑
Ctrl + Alt + O : 불필요한 import문 제거 :