본문 바로가기

JAVA

(6)
제네릭 인터페이스 예시 Comparable 인터페이스는 어떤 클래스 객체를 정렬할 때 구현하는 인퍼페이스이다. 코드는 다음과 같다. public interface Comparable { int compareTo(T o); } 여기서 T는 타입 파라미터를 의미하며, 공란으로 남겨두면 기본값인 Object 타입이 들어가게 된다. 공란으로 남겨둘 시 다음과 같이 특정 타입으로 캐스팅을 해주어야 한다. public class NoTypeParameter implements Comparable{ private int value; public NoTypeParameter(int pValue) { this.value = pValue; } @Override public int compareTo(Object arg0) { // 기본값인 Obj..
Enumeration Type에 대하여 학교에서 자바를 배웠지만, 수업에서 언급조차 되지 않아 이제서야 알게 된 기능이다. Enumeration Type은 요일(월,화,수,목,금,토,일), 가위 바위 보, 사칙연산(더하기, 빼기, 곱하기, 나누기) 등과 같이, 출력되는 경우의 수를 모두 알고 있을 경우 하나의 목록으로 묶어 사용할 때 쓰인다. 필자는 여태까지 요일을 다룰 때 다음과 같이 월요일~일요일까지를 0~6까지의 정수로 표현하였다. public class BeforeEnum { public static final String[] WEEKDAYS = {"월","화","수","목","금","토","일"}; public static void main(String[] args) { // 요일을 가리키는 변수 - 목요일 int weekDay = ..
포장 클래스와 등호(==) public static void main(String[] args) { int i1 = 1000; int i2 = 1000; Integer i3 = 1000; Integer i4 = 1000; System.out.println(i1==i2); // true System.out.println(i3==i4); // false } 포장 클래스는 원시 자료형을 하나의 객체로 사용하고자 할 때 쓰인다. 원시 자료형은 등호(==)를 사용해 비교할 때, 값 그 자체를 비교하지만, 포장 클래스 변수는 참조형이고, 참조형 변수에 등호를 사용할시 동일한 객체를 가리키는지를 비교하기 때문에, 두 포장 클래스 인스턴스 안의 값이 같더라도 별개의 객체이기 때문에 거짓을 반환한다. 그래서 일반적으로 포장 클래스 안의 값을 비교..
추상 클래스 예제 - 운전면허 운전을 하려면 운전면허가 필요하다. 운전면허는 여러 종류가 있지만 여기선 간단히 두 종류 1종 보통, 2종 보통으로 나누겠다. 1종 보통 면허는 2종 보통의 상위호환으로, 2종 보통 면허가 필요한 차량은 운전할 수 있다. 반대로 2종 보통은 1종 보통 면허를 필요로 하는 몇몇 차량을 운전할 수 없다. 1종 보통은 자동, 수동 승용차를 운전할 수 있지만, 2종 보통은 수동 승용차를 운전할 수 없는 점이 그 예이다. 위의 예시는 다음과 같이 만들 수 있다. // Car.java - 자동차 클래스 public class Car{} // ManualCar.java - 자동차 클래스를 부모로 하는 수동 승용차 클래스 public class ManualCar extends Car{} // AutoCar.java -..
클래스 상속의 함정 다음과 같은 두 클래스가 있다. public class Bus { // 버스의 좌석은 20석 int seats = 20; int occupied; // 승객 1명 추가 public void add1Passenger() { if (seatsAvailable()) occupied += 1; System.out.println("잔여 좌석 : " + (seats - occupied)); else System.out.println("빈 좌석이 없습니다."); } // 빈 자리가 있는지 검사하는 메서드 private boolean seatsAvailable() { return occupied < seats; } } public class LargeBus extends Bus{ // 대형 버스의 좌석은 40석 int..
반복 코드 제거 - Constructor Chaining, Initialization Blocks 다음은 여러 종류의 생성자가 존재하는 클래스다. public class ConstructorChaining { public int val1; public int val2; public int val3; public ConstructorChaining(int pVal1) { this.val1 = pVal1; } public ConstructorChaining(int pVal1, int pVal2) { this.val1 = pVal1; this.val2 = pVal2; } public ConstructorChaining(int pVal1, int pVal2, int pVal3) { this.val1 = pVal1; this.val2 = pVal2; this.val3 = pVal3; } } 위와 같이 짜게 되..