java 21

산야(Sanya)·2024년 1월 25일

java 족보

목록 보기
23/28

1. 다음 main()이 실행되면 아래 예시와 같이 출력되도록 MyPoint 클래스를 작성하라.

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)
다른점

2.중심을 나타내는 정수 x, y와 반지름 radius 필드를 가지는 Circle 클래스를 작성하고자 한다. 생성자는 3개의 인자(x, y, raidus)를 받아 해당 필드를 초기화하고, equals() 메소드는 두 개의 Circle 객체의 중심이 같으면 같은 것으로 판별하도록 한다.

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
같은 원

3.Scanner를 이용하여 한 라인을 읽고, 공백으로 분리된 어절이 몇 개 들어 있는지 "그만"을 입력할 때까지 반복하는 프로그램을 작성하라.

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();
	}
}

4. 아래와 같이 출력 되도로 하시오.

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
같은 사람

5. 지네릭(Generic)이란?

제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 말합니다. 이를 통해 재사용성을 높이고, 코드의 중복을 줄일 수 있습니다.

6.Generic 이전의 코드의 문제 상황들을 예시로 설명하시오.

제네릭 이전에는 객체를 저장하거나 반환할 때 항상 Object 타입을 사용했습니다. 이로 인해 불필요한 타입 변환을 해야 했고, 잘못된 타입의 객체를 저장하거나 반환하는 실수를 방지할 수 없었습니다. 예를 들어, ArrayListString 객체를 저장하려고 했지만 실수로 Integer 객체를 저장하는 경우, 이를 검출하지 못하고 실행 시간에 오류가 발생했습니다.

7. 아래의 결과가 나오도록 프로그래밍을 완성 하시오.

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

8. 아래와 같이 출력값이 나오도록 프로그래밍 하시오.

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

profile
개발일지

0개의 댓글