Java
[Java] Generic 제네릭 - 단계별 프로젝트7 (HashSet & TreeSet)
단계별 프로젝트 7 - 문제 단계별 프로젝트 03단계에서는 동명이인의 데이터가 존재하지 않는다고 가정했지만 배열을 대상으로 저장이 이뤄졌기 때문에, 사실상 동명이인의 데이터가 저장되는 상황을 막지는 못했다. 따라서 이번 단계에서는 동일한 데이터의 저장을 허용하지 않는 HashSet 클래스를 대상으로 저장이 이뤄지도록 프로젝트를 변경하고자 한다. 그리고 이 과정에서 동일한 인스턴스의 기준을 다음과 같이 정의하고자 한다. (HashSet 구현후 TreeSet도 구현해 본다.) "전화번호만 같으면, 그 이외의 정보가 아무리 달라도 동일한 데이터로(인스턴스로) 간주한다." 실행 예 선택하세요... 1. 데이터 입력 2. 데이터 검색 3. 데이터 삭제 4. 전체보기 5. 프로그램 종료 선택 : 1 데이터 입력을 ..
[Java] Generic 제네릭
와일드카드의 상한과 하한 제한 다음 예제에는 프로그래머의 실수가 존재한다. 그러나 컴파일 과정에서는 이 실수가 드러나지 않는다. 실수가 컴파일 과정에서 발견될 수 있도록 매개변수 선언을 수정하자. 그리고 프로그래머의 실수를 바로잡자. class Box { private T ob; public void set(T o) { ob = o; } public T get() { return ob; } } class BoundedWildcardDemo { public static void addBox(Box b1, Box b2, Box b3) { b3.set(b1.get() + b2.get());// 프로그래머의 실수가 있는 부분 } public static void main(String[] args) { Box b..
[Java] Generic 제네릭 예제
제네릭 소스코드1 (1) class Apple { public String toString() { return "I am an apple."; } } class Orange { public String toString() { return "I am an orange."; } } class AppleBox { private Apple ap; public void set(Apple a) { ap = a; } public Apple get() { return ap; } } class OrangeBox { private Orange or; public void set(Orange o) { or = o; } public Orange get() { return or; } } class FruitAndBox { pu..
[Java] Generic 제네릭 Step
Generic 제네릭 Step1 문제1. Orange 클래스를 만들고 인스턴스 변수로는 당도를 둔다.(sugarContent) 당도를 초기화 하는 생성자를 만든다. 그리고 당도를 출력하는 메소드를 둔다.(showSugarContent). Orange 하나를 저장할 수 있는 OrangeBox를 만든다.(배열이 아닌 하나를 저장할 수 있게끔 한다.) Orange를 저장하고 꺼내는 메소드를 만든다.(store, pullOut) 메인메소드에서 Orange의 당도가 10인 Orange를 OrangeBox에 저장한다. 저장되어 있는 Orange를 꺼내서 당도를 확인한다. Apple 클래스를 만들고 인스턴스 변수로는 무게를 둔다.(weight) 무게를 초기화 하는 생성자를 만든다. 그리고 무게를 출력하는 메소드를 둔..
[Java] Generic 제네릭 개념
Generic 제네릭 1. 제네릭 - 매개변수화된 자료형 - 클래스 / 인터페이스 / 메소드 적용 - 제네릭 클래스 / 제네릭 인터클래스 / 제네릭 메소드 2. 제네릭 클래스의 형태 - 클래스명 { ... } - 클래스명 객체명 = new 클래스명(); 3. 제네릭에 이용할 수 있는 자료형 - 제네릭으로 사용할 수 있는 자료형 : 레퍼런스 형 (int, double 같은 기본 자료형은 사용 불가 / 사용하려면 wrapper 클래스인 Integer, Double 이용해야 함) 4. 제한된 제네릭 타입 - 이렇게 적으면 제네릭 T 자리에는 클래스 타입이 V이거나 V클래스의 하위 클래스 타입만 올 수 있다. 5. 와일드카드 인수 - 와일드카드 : '?' 로 나타낸다. - 와일드카드 자리에는 어떤 클래스 타입도..
[Java] Math클래스 & Random 클래스 등
BigDecimal 클래스의 활용 short 그리고 int와 같은 정수 자료형의 문제점은 매우 큰 수의 표현이 불가능하다는 데에 있고, java는 이러한 문제점의 해결을 위해서 BigInter 클래스를 제공하고 있다. float 그리고 double과 같은 실수 자료형의 문제점은 정밀한 값의 표현이 불가능해 항상 오차가 존재하다는 데에 있다. java는 이러한 문제점의 해결을 위해서 BigDecimal 클래스를 제공하고 있다. 수학관련 기능의 제공을 위한 Math 클래스 - Math 클래스는 모든 멤버가 static으로 선언되어 있음 - 수학관련 기능의 제공을 위해 정의된 클래스일뿐 인스턴스의 생성을 목적으로 정의된 클래스는 아님 java.util.Random클래스 난수를 얻는 방법을 생각하면 Math.r..
[Java] 배열 toString
import java.util.Arrays; import java.util.Date; class Test { public static void main(String[] args) { int[] arr = {1, 2, 3}; Date date = new Date(); System.out.println(arr.toString()); System.out.println(date.toString()); System.out.println(Arrays.toString(arr)); } } * Date - 날짜와 시간 정보를 저장하는 클래스 - 특정 시점의 날짜를 표현하는 클래스로 연도, 월, 일, 시간 정보가 저장된다. - 객체 안에 날짜 정보를 주고받을 때 매개변수나 리턴 타입으로 주로 사용된다.
[Java] Wrapper 클래스
Wrapper 클래스 'Wrapper 클래스'라는 이름에는 '감싸는 클래스'라는 의미가 담겨있다. Wrapper 클래스는 기본 자료형의 데이터를 감싸는 클래스라고 생각하면 된다. Wrapper 클래스의 종류기본 생성자 BooleanBoolean(boolean value) CharacterCharacter(char value) ByteByte(byte value) ShortShort(short value) IntegerInteger(int value) LongLong(long value) FloatFloat(float value), Float(double value) DoubleDouble(double value) 위에서 보이듯이 모든 기본 자료형에 해당하는 Wrapper 클래스가 정의되어 있다. 그리고 ..
[Java] Clone 문제 (깊은 복사, 얕은 복사, 공변반환)
1. 깊은복사 & 공변반환 문제 class Point implements Cloneable { private int xPos; private int yPos; public Point(int x, int y) { xPos=x; yPos=y; } public void showPosition() { System.out.printf("[%d, %d]", xPos, yPos); } public void changePos(int x, int y) { xPos=x; yPos=y; } public Object clone() throws CloneNotSupportedException { return super.clone(); } } class Rectangle implements Cloneable { Point upp..
[Java] 인스턴스 복사 clone 메소드
인스턴스 복사(복제) - clone 메소드 - Object 클래스에는 인스턴스의 복사를 위한 다음 메소드가 정의되어 있다. protected Object clone() throws CloneNotSupportedException 그리고 이 메소드가 호출되면, 이 메소드가 호출된 인스턴스의 복사본이 생성되고, 이 복사본의 참조 값이 반환된다. 단 다음의 조건을 만족해야 이 메소드를 호출할 수 있다. "Cloneable 인터페이스를 구현해야 합니다." 즉 Cloneable 인터페이스를 구현하고 있는 클래스의 인스턴스만이 clone 메소드의 호출이 가능하다. 만약에 Cloneable 인터페이스를 구현하지 않은 클래스의 인스턴스에서 clone 메소드를 호출하면 CloneNotSupportedException 예..