[K-디지털 트레이닝] 학습정리 34일차 (2024-08-02)

smoo·2024년 8월 2일

JAVA_STUDY

목록 보기
19/25
post-thumbnail

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

public static void md2() throws IOException {...}

  • 메소드 내에서 문장을 실행하는 과정에서 해당 에러가 발생할 수 있다는 의미
  • 만약 함수에서 예외 상황의 문제가 생기게 되면 throws Exception을 자기자신을 호출한 함수한테 던진다. (예외 처리를 떠넘긴다.) → 계속 호출 한 곳으로 던져서 결국 try catch의 catch에서 Exception 에서 받게 된다. → try catch가 없는 경우 메인 메소드까지 넘어가서 메인 메소드가 최종적으로 JVM으로 넘기는 것도 가능하다. (하지만 그 전에 try catch로 예외 처리를 직접 하는 것이 좋다.)
  • 둘 이상의 예외를 넘길 때는 ,(콤마)로 구분한다.
    public void simpleWrite() throws IOException, IndexOutofBoundsException { .... }

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

① unchecked Exception
Exception의 subclass인 unchecked Exception은(= RuntimeException) 예외 처리를 해야 한다고 강제하지 않는다. (런타임에 체크)
② checked Exception
Exception의 subclass인 checked Exception은 반드시 프로그래머가 예외 처리를 해야 한다. (컴파일 타임에 체크) 예외 처리를 하지 않으면 프로그램 작성중에 이미 빨간줄로 에러 표시가 떠서 진행할 수가 없게 된다.

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

🟠예시🟠

String str1 = new String("So Simple");
String str2 = new String("So Simple");

String str3 = "So Simple"; 
String str4 = "So Simple";
//이렇게 str3, str4 String 객체를 만들면 == 을 해도 같은 문자열임을 확인할 수 있다.(참조 주소값도 문자열도 같음)
...
if(str1 == str2)      // 참조 주소 비교
if(str1.equals(str2)) // 참조하는 객체의 값 비교 = 문자열 내용 비교

  • String class도 당연히 Object class를 상속한다. 그리고 이미 문자열의 내용비교를 하도록 Object class의 equals() 함수를 오버라이딩 하고 있다.
  • 여기에서 문자열 비교시에 equals를 사용한 이유는 new로 객체 생성을 했기 때문이다. 이렇게 객체를 생성했을 때 참조 주소값 비교가 아닌 문자열의 내용 비교를 위해서는 일반적인 객체에서 비교하는 방법과 마찬가지의 방법으로 equals를 사용해서 비교를 해야 한다.
  • String 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)
다른점
*/

5. 프로그램을 작성하라.

  • 문자열을 입력 받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라.
  • 문자열을 입력하세요. 빈칸이나 있어도 되고 영어 한글 모두 됩니다. 힌트) substring 이용 할수있음. 다른함수도 많음
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

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

Wrapper class: 기본 자료형의 값을 감싸는 클래스

  • 기본 자료형(primitive data type)을 객체로 만들기 위해(객체화) 사용 되는 클래스를 래퍼 클래스(wrapper class)라고 한다.
  • 감싸는 클래스라는 뜻의 wrapper class로 이름 붙여진 것은 기본 데이터 타입의 값을 클래스가 소유하고 있는(감싸는) 형태로 만들어지기 때문이다. 이렇게 모든 기본 자료형(primitive data type) 8개는 객체로 만들 수 있다.

7. auto unboxing 이란?

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 내용 동일하다.
*/
  • String class도 당연히 Object class를 상속, 문자열의 내용비교를 하도록 Object class의 equals() 함수를 오버라이딩 하고 있음

  • 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
종료입니다.

10. 에러를 내는 주체는?

에러가 발생하는 원인은 크게 내부적인 요인과 외부적인 요인이 있다.
외부적인 요인에는 입력 에러, 하드웨어 문제, 네트워크 연결 에러 등이 있으며, 내부적인 요인으로는 개발자의 코드 작성에 있다.

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

① 에러(Error)
한 번 발생하면 복구하기 어려운 수준의 심각한 문제를 의미하고, 대표적으로 메모리 부족인 OutOfMemoryError와 스택 오버플로우(StackOverflowError)가 있다.
② 예외(Exception)
개발자의 잘못된 사용으로 인해 발생하는 에러는 상대적으로 약한 문제의 수준을 말한다. 즉, 개발자의 실수로 인해 발생하는 것이다. 이는 코드 수정을 통해 수습이 가능한 문제이다.


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


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

함수기능
protected Object clone()해당 객체의 복제본을 생성하여 반환함.
boolean equals(Object obj)해당 객체와 전달받은 객체가 같은지 여부를 반환함.
protected void finalize()해당 객체를 더는 아무도 참조하지 않아 가비지 컬렉터가 객체의 리소스를 정리하기 위해 호출함.
Class getClass()해당 객체의 클래스 타입을 반환함.
int hashCode()해당 객체의 해시 코드값을 반환함.
void notify()해당 객체의 대기(wait)하고 있는 하나의 스레드를 다시 실행할 때 호출함.
void notifyAll()해당 객체의 대기(wait)하고 있는 모든 스레드를 다시 실행할 때 호출함.
String toString()해당 객체의 정보를 문자열로 반환함.
void wait()해당 객체의 다른 스레드가 notify()나 notifyAll() 메소드를 실행할 때까지 현재 스레드를 일시적으로 대기(wait)시킬 때 호출함.
void wait()해당 객체의 다른 스레드가 notify()나 notifyAll() 메소드를 실행하거나 전달받은 시간이 지날 때까지 현재 스레드를 일시적으로 대기(wait)시킬 때 호출함.
void wait(long timeout)해당 객체의 다른 스레드가 notify()나 notifyAll() 메소드를 실행하거나 전달받은 시간이 지나거나 다른 스레드가 현재 스레드를 인터럽트(interrupt) 할 때까지 현재 스레드를 일시적으로 대기(wait)시킬 때 호출함.
profile
코딩 스터디 정리

0개의 댓글