Java16

ONLY·2022년 11월 15일
0

Java_질의응답

목록 보기
14/14

1. 문제01

다음 조건을 만족하는 클래스 Person을 구현하여 테스트하는 프로그램을 작성하시오.(필수) ⭐️

- 클래스 Person은 이름을 저장하는 필드 구성
- 클래스 Person은 상위 클래스 Object의 메소드 equals()를 오버라이딩하여 이름이 같으면 true를 반환하는 메소드 구현
- 다음과 같은 소스로 클래스 Person을 점검
Person p1 = new Person("홍길동");
System.out.println(p1.equals(new Person("홍길동")));
System.out.println(p1.equals(new Person("최명태")));
public class IAmPerson {
	public static void main(String[] args) {
		Person p1 = new Person("홍길동");
		
		System.out.println(p1.equals(new Person("홍길동")));
		System.out.println(p1.equals(new Person("최명태")));

	}
}

class Person {
	private String name;
	
	public Person (String name) {
		this.name = name;
	}
	
	@Override
	public boolean equals (Object obj) {
		if (this.name == ((Person)obj).name) {
			return true;
		} else {
			return false;
		}
	}
}

2. 문제02

아래를 참고하여, 메소드 equals()와 연산자 == 의 차이를 비교 설명하시오.(필수) ⭐️

	public static void main(String[] args) {
		String s1 = new String("java");
		String s2 = new String("java");
		String s3 = s2;
`
		System.out.println(s1 == s2);
		System.out.println(s1.equals(s2));
		System.out.println(s2 == s3);
		System.out.println(s2.equals(s3));
		`
		if(s1 == s2)
			System.out.println("s1, s2 참조 대상 같다.");
		else
			System.out.println("s1, s2 참조 대상 다르다. ");
		`
		if(s2 == s3)
			System.out.println("s2, s3 참조 대상 같다.");
		else
			System.out.println("s2, s3 참조 대상 다르다. ");
	`
		if(s1.equals(s2))
			System.out.println("s1, s2 내용 동일하다.");
		else
			System.out.println("s1, s2 내용 다르다.");
		`
		if(s2.equals(s3))
			System.out.println("s2, s3 내용 동일하다.");
		else
			System.out.println("s2, s3 내용 다르다."

[ == ]
참조형은 주소값을 갖기 때문에 그 값을 비교하는 반면
[ equals ]
는 그 내용을 비교한다.

3. 문제03

아래의 결과 값은 false 출력이 된다. true 가 되도록 INum을짜시오.

  INum[] ar1 = new INum[3];
  INum[] ar2 = new INum[3];
`
  ar1[0] = new INum(1); ar2[0] = new INum(1);
  ar1[1] = new INum(2); ar2[1] = new INum(2);
  ar1[2] = new INum(3); ar2[2] = new INum(3);
`
  System.out.println(Arrays.equals(ar1, ar2));
import java.util.Arrays;

public class INumMain{
  public static void main(String[] args) {
  	INum[] ar1 = new INum[3];
  	INum[] ar2 = new INum[3];
      ar1[0] = new INum(1); ar2[0] = new INum(1);
      ar1[1] = new INum(2); ar2[1] = new INum(2);
      ar1[2] = new INum(3); ar2[2] = new INum(3);
      System.out.println(Arrays.equals(ar1, ar2));
  }
}

class INum {
  private int num;
  public INum(int num) {
      this.num = num;
  }
  
  @Override
  public boolean equals(Object obj) {
      if(this.num == ((INum)obj).num)
          return true;
      else
          return false;
  }
}

4. Generic

1) Generic 이란

Java 1.5 부터 나온 개념으로, Generic이 나오기 전까지는 참조형 변수 타입을 Object로 받을 수 밖에 없었다.

자료형을 결정짓지 않고 틀을 만들어 두는 것을 말함

2) 형태

Object(참조형 타입) 자리에 T들어감 → Generic

그래서 자료형의 정보를 Object 대신 T로 작성해 비워 두고 인스턴스 생성시 참조 타입을 결정함

3) Generic 이전의 코드의 문제 상황들의 예

오류의 발견

  • 컴파일 과정에서 발견
  • 실행 과정에서 예외로 발견
    (실수가 실행 과정에서 조차 발견되지 않을 수 있다)
    → 문법이 컴파일 과정에서 실수가 발견될 수 있도록 발전해 가고 있다.

최대한 컴파일 과정에서 오류가 발견될 수 있도록 코드를 짜는 것이 좋은 것

5. 문제04

아래가 돌아 가도록 DBox를 완성 하시오.

public static void main(String[] args) {
   DBox<String, Integer> box = new DBox<String, Integer>();
   box.set("Apple", 25);
   System.out.println(box);
}
public class IAmDBox {
	public static void main(String[] args) {
	   DBox<String, Integer> box = new DBox<String, Integer>();
	   
	   box.set("Apple", 25);
	   
	   System.out.println(box);
	}
}

class DBox<Str, Integer> {
	Str fruit;
	Integer m;
	
	public void set(Str fruit, Integer m) {
		this.fruit = fruit;
		this.m = m;
	}
	
	public String toString() {
		return fruit+ " "+m;
	}
}

0개의 댓글