public static void main(String [] args) {
MyPoint p = new MyPoint(3, 50);
MyPoint q = new MyPoint(4, 50);
System.out.println(p);
if(p.equals(q)) System.out.println("같은 점");
else System.out.println("다른 점");
}
class MyPoint {
private int x, y;
public MyPoint(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof MyPoint) {
MyPoint p = (MyPoint) obj;
return (this.x == p.x && this.y == p.y);
}
return false;
}
@Override
public String toString() {
return "Point(" + x + "," + y + ")";
}
}
public class Objectmain2 {
public static void main(String[] args) {
MyPoint p = new MyPoint(3, 50);
MyPoint q = new MyPoint(4, 50);
System.out.println(p);
if (p.equals(q))
System.out.println("같은 점");
else
System.out.println("다른 점");
}
}
======================================================
Point(3,50)
다른점
public static void main(String[] args) {
Circle a = new Circle(2, 3, 5); // 중심 (2, 3)에 반지름 5인 원
Circle b = new Circle(2, 3, 30); // 중심 (2, 3)에 반지름 30인 원
System.out.println("원 a : " + a);
System.out.println("원 b : " + b);
if(a.equals(b))
System.out.println("같은 원");
else
System.out.println("서로 다른 원");
}
class Circle6 {
private int x, y, radius;
public Circle6(int x, int y, int radius) {
this.x = x;
this.y = y;
this.radius = radius;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Circle6) {
Circle6 c = (Circle6) obj;
return (this.x == c.x && this.y == c.y);
}
return false;
}
@Override
public String toString() {
return "Circle(" + x + "," + y + ")반지름" + radius;
}
}
public class Objectmain2 {
public static void main(String[] args) {
Circle6 a = new Circle6(2, 3, 5); // 중심 (2, 3)에 반지름 5인 원
Circle6 b = new Circle6(2, 3, 30); // 중심 (2, 3)에 반지름 30인 원
System.out.println("원 a : " + a);
System.out.println("원 b : " + b);
if (a.equals(b))
System.out.println("같은 원");
else
System.out.println("서로 다른 원");
}
}
======================================================
원 a : Circle(2,3)반지름5
원 b : Circle(2,3)반지름30
같은 원
I love Java.
어절 개수는 3
자바는 객체 지향 언어로서 매우 좋은 언어이다.
어절 개수는 7
그만
종료합니다...
[Hint] Scanner.nextLine()을 이용하면 빈칸을 포함하여 한 번에 한 줄을 읽을 수 있다.
import java.util.Scanner;
import java.util.StringTokenizer;
public class Objectmain2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print(">>");
String input = scanner.nextLine();
if (input.equals("그만")) {
System.out.println("종료합니다...");
break;
}
StringTokenizer st = new StringTokenizer(input, " ");
System.out.println("어절 개수는 " + st.countTokens());
}
scanner.close();
}
}
public static void main(String[] args) {
Person p1 = new Person('Lee',29)
Person p2 = new Person('Lee',29)
System.out.println(p1);
if(p1.equals(p2))
System.out.println("같은 사람");
else
System.out.println("다른 사람");
}
class Person2 {
private String name;
private int age;
public Person2(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Person2) {
Person2 p = (Person2) obj;
return (this.name.equals(p.name) && this.age == p.age);
}
return false;
}
@Override
public String toString() {
return "이름:" + name + " 나이:" + age;
}
}
public class Objectmain2 {
public static void main(String[] args) {
Person2 p1 = new Person2("Lee", 29);
Person2 p2 = new Person2("Lee", 29);
System.out.println(p1);
if (p1.equals(p2))
System.out.println("같은 사람");
else
System.out.println("다른 사람");
}
}
======================================================
이름:Lee 나이:29
같은 사람
제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 말합니다. 이를 통해 재사용성을 높이고, 코드의 중복을 줄일 수 있습니다.
제네릭 이전에는 객체를 저장하거나 반환할 때 항상 Object 타입을 사용했습니다. 이로 인해 불필요한 타입 변환을 해야 했고, 잘못된 타입의 객체를 저장하거나 반환하는 실수를 방지할 수 없었습니다. 예를 들어, ArrayList에 String 객체를 저장하려고 했지만 실수로 Integer 객체를 저장하는 경우, 이를 검출하지 못하고 실행 시간에 오류가 발생했습니다.
class DDBoxDemo {
public static void main(String[] args) {
DBox<String, Integer> box1 = new DBox<>();
box1.set("Apple", 25);
DBox<String, Integer> box2 = new DBox<>();
box2.set("Orange", 33);
DDBox<DBox<String, Integer>, DBox<String, Integer>> ddbox = new DDBox<>();
ddbox.set(box1, box2);
System.out.println(ddbox);
}
}
class DBox<L, R> {
private L left;
private R right;
public void set(L o, R r) {
left = o;
right = r;
}
@Override
public String toString() {
return left + " & " + right;
}
}
class DDBox<U, V> {
private U upper;
private V under;
public void set(U u, V v) {
upper = u;
under = v;
}
@Override
public String toString() {
return upper + "\n" + under;
}
}
public class DDBoxDemo {
public static void main(String[] args) {
DBox<String, Integer> box1 = new DBox<>();
box1.set("Apple", 25);
DBox<String, Integer> box2 = new DBox<>();
box2.set("Orange", 33);
DDBox<DBox<String, Integer>, DBox<String, Integer>> ddbox = new DDBox<>();
ddbox.set(box1, box2);
System.out.println(ddbox);
}
}
=====================================================
Apple & 25
Orange & 33
public static void main(String[] args) {
Box<Integer> box1 = new Box<>();
box1.set(99);
Box<Integer> box2 = new Box<>();
box2.set(55);
System.out.println(box1.get() + " & " + box2.get());
swapBox(box1, box2);
System.out.println(box1.get() + " & " + box2.get());
}
class Box<T> {
private T ob;
public void set(T o) {
ob = o;
}
public T get() {
return ob;
}
}
public class SwapBoxDemo {
public static <T> void swapBox(Box<T> box1, Box<T> box2) {
T temp = box1.get();
box1.set(box2.get());
box2.set(temp);
}
public static void main(String[] args) {
Box<Integer> box1 = new Box<>();
box1.set(99);
Box<Integer> box2 = new Box<>();
box2.set(55);
System.out.println(box1.get() + " & " + box2.get());
swapBox(box1, box2);
System.out.println(box1.get() + " & " + box2.get());
}
}
=====================================================
99 & 55
55 & 99