34일차

김윤정·2024년 8월 4일

코딩

목록 보기
34/60
post-thumbnail

1. throws 에 대하여 설명하시오.

throws는 해당 메서드가 특정 예외를 던질 수 있음을 명시적으로 선언하는 데 사용됩니다.

2.checked 와 unckecked Excetpion 을 설명하시오.

  • checked Excetpion: 예외 처리를 하지 않으면 프로그램 작성중에 이미 빨간줄로 에러 표시가 떠서 진행할 수가 없게 됩니다
  • unckecked Excetpion: 런타임에 발생하는 예외로, 예외 처리가 강제되지 않습니다. 주로 프로그래머의 실수로 인해 발생합니다.

3. String 클래스 에서 문자열 비교시 equals를 쓰는 이유는?

String class도 Object class를 상속합니다. 그리고 이미 문자열의 내용비교를 하도록 Object class의 equals() 함수를 오버라이딩 하고 있습니다

### 4. 다음 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("다른 점");			

}

/
Point(3,50)
다른점
/

package day_2024_08_02;

class MyPoint extends Object {
	int num1, num2;

	MyPoint(int num1, int num2) {
		this.num1 = num1;
		this.num2 = num2;
	}

	@Override
	public boolean equals(Object obj) {
		if (this.num1 == ((MyPoint) obj).num1 && this.num2 == ((MyPoint) obj).num2) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public String toString() {
		return "Point(" + num1 + "," + num2 + ")";
	}
}

public class MyPointMain {

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

	}

}

5. 문자열을 입력 받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라.

문자열을 입력하세요. 빈칸이나 있어도 되고 영어 한글 모두 됩니다.
힌트) substring 이용 할수있음. 다른함수도 많음
I Love you
Love youI
Love youI
ove youI L
ve youI Lo
e youI Lov
youI Love
youI Love
ouI Love y
uI Love yo
I Love you

package day_2024_08_02;

import java.util.Scanner;

public class RotationMain {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("문자열을 입력하세요. 빈칸이나 있어도 되고 영어 한글 모두 됩니다.");

		String answer = sc.nextLine();
		for (int i = 0; i < answer.length(); i++) {
			System.out.print(answer.substring(i));
			System.out.println(answer.substring(0, i));

		}

	}

}

6. 래퍼 클래스(Wrapper class)란 무엇인가?

기본 자료형의 값을 인스턴스로 감싸는 목적의 클래스를 가리켜 래퍼 클래스라 합니다.

7. auto unboxing 이란?

  • 자동으로 unboxing이 이루어집니다 → 자동으로 값이 꺼내집니다.
  • 기본 자료형 타입 변수에 바로 객체의 값이 반환됩니다
  • 기본형 변수 = 참조형 객체 값 → 이렇게 대입하는 경우

8. 다음 조건을 만족하는 클래스 String의 객체 이용 프로그램을 작성하여 메소드 equals()와 연산자 == 의 차이를 비교 설명하시오.(필수) ⭐️

  • 메소드 equals()와 비교 연산자 ==의 차이를 다음 소스로 점검

    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));
    public class StringEquals {
    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 내용 다르다.");
    }
    }
    /
    false
    true
    true
    true
    s1, s2 참조 대상 다르다.
    s2, s3 참조 대상 같다.
    s1, s2 내용 동일하다.
    s2, s3 내용 동일하다.
    /

new로 객체 생성을 했기 때문에 기본적으로 참조 주소가 저장됩니다.
==연산자는 객체의 주소를 비교하는 것이기 때문에 == 연산시에 주소값을 비교하게 됩니다.

참조 주소가 아닌 문자열의 내용 비교를 위해서는 equals를 오버라이드 해서 사용해야 하지만 이미 String클래스에 equals가 오버라이딩 되어있으므로 바로 사용하면 됩니다.

9. 아래의 결과를 나타내는 사칙연산 계산기를 완성하시오.

-주의 잘못된 입력이 있으면 처음부터 다시 입력을 받도록 예외처리 구문(try catch)을 넣을것

계산기

수1 : 10

수2 : 20

연산 : +

계산 결과 : 30

계속 하시겠습니까? 계속 : Y , 종료 : N

y

계산기

수1 : R

잘못된 입력입니다. 다시입력해 주세요

계산기

수1 : 10

수2 : 20

연산 : *

계산 결과 : 200

계속 하시겠습니까? 계속 : Y , 종료 : N

y

계산기

수1 : 90

수2 : 80

연산 : /

계산 결과 : 1

계속 하시겠습니까? 계속 : Y , 종료 : N

n

종료입니다.

package day_2024_08_04;

import java.util.InputMismatchException;
import java.util.Scanner;

class Carculate {
	private double num1, num2;
	private String cal, answer;

	public void show() {
		while (true) {
			System.out.println("계산기");
			Scanner sc = new Scanner(System.in);

			try {
				System.out.print("수1 : ");
				num1 = sc.nextDouble();
				System.out.print("수2 : ");
				num2 = sc.nextDouble();
			} catch (InputMismatchException e) {
				System.out.println("숫자를 입력해 주세요");
				continue;
			}

			System.out.print("연산: ");
			cal = sc.next();

			switch (cal) {
			case "+":
				System.out.println("계산결과: " + add());
				break;
			case "-":
				System.out.println("계산결과: " + sub());
				break;
			case "*":
				System.out.println("계산결과: " + mul());
				break;
			case "/":
				System.out.println("계산결과: " + div());
				break;
			default:
				System.out.println("잘못된 연산자 입니다.(+, -, *, /) 만 가능");
				continue;
			}

			System.out.println("계속 하시겠습니까? 계속: Y, 종료: 아무버튼");
			answer = sc.next();
			if (answer.equals("Y") || answer.equals("y"))
				continue;
			else
				System.out.println("프로그램을 종료합니다.");
			break;
		}
	}

	public double add() {
		return num1 + num2;
	}

	public double sub() {
		return num1 - num2;
	}

	public double mul() {
		return num1 * num2;
	}

	public double div() {
		if (num2 == 0) {
			System.out.println("0으로는 나눌 수 없습니다.");
			return 0;
		}
		return num1 / num2;
	}
}

public class CarculatorMain {

	public static void main(String[] args) {
		Carculate calcu = new Carculate();
		calcu.show();

	}

}

10.에러를 내는 주체는?

  • 에러: java.lang.error
  • 예외: java.lang.Exception

11. 에러(Error)와 예외(Exception)의 차이는?

  • 에러는 발생 시 프로그램이 복구가 불가능해집니다.
  • 예외는 발생해도 코드를 수정하거나 입력 값을 바꾸면 해결되는 문제입니다.

12. 예외처리(Exception Handling) UML(상속도)참고하여 그리시오.

13. Object클래스의 11개 함수를 나열해 보시오.

  1. int hashCode()
    현재객체의 해쉬코드 값을 반환함

  2. String toString()
    현재객체의 문자열로 된 값을 반환함

  3. boolean equals(Object obj)
    obj객체와 비교하여 같으면 true, 다르면 false값을 반환함

  4. final Class<?> getClass()
    현재객체의 클래스 정보를 담은 Class타입의 객체 반환함

  5. protected Object clone()
    현재객체의 복사본을 생성 후 반환함

  6. final void notify()
    현재객체를 사용하기 위해 대기하고 있는 쓰레드 하나를 깨움

  7. final void notifyAll()
    현재객체를 사용하기 위해 대기하고 있는 모든 쓰레드를 깨움

  8. final void wait()
    다른 쓰레드가 깨울 때까지 현재 쓰레드를 대기시킴

  9. final void wait(long timeoutMillis)
    다른 쓰레드가 깨우거나 정해진 시간만큼 현재 쓰레드를 대기시킴

  10. final void wait(long timeoutMillis, int nanos)
    다른 쓰레드가 깨우거나 정해진 시간만큼 현재 쓰레드를 대기시킴

  11. protected void finalize()
    객체가 소멸되기 전 자동으로 호출되는 메소드(삭제예정)

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

Person p1 = new Person("홍길동");
System.out.println(p1.equals(new Person("홍길동"))); //true 출력
System.out.println(p1.equals(new Person("최명태"))); //false 출력

package day_2024_08_02;

class Person extends Object {
	String name;

	Person(String name) {
		this.name = name;
	}

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

public class PersonMain {

	public static void main(String[] args) {

		Person p1 = new Person("홍길동");
		System.out.println(p1.equals(new Person("홍길동")));
		System.out.println(p1.equals(new Person("최명태")));
	}

}

0개의 댓글