ToBeMaster-JAVA / Standard-JAVA-Basic

0 stars 0 forks source link

5주차 수행목표 #7

Closed yummygyudon closed 2 years ago

yummygyudon commented 2 years ago

1. 교재

: 「Chapter 8. 예외 처리」

기간 : 2022.01.22 ~ 2022.01.28

*방법은 이전 주와 동일


2. 준비 문제

01stone commented 2 years ago

《 Chap.1 : 상속 ~ Chap.6 : Object클래스 》

Q1. 다음 내용 중 옳은 것과 틀린 것을 구분하고, 틀린 내용은 왜 틀렸는지 서술하시오.

O - 1, 4 (단위별로 여러개의 클래스를 작성 = 가능한 한 많은 관계를 맺음...?)
X - 3, 2 : 생성자는 상속되지 않는다 (초기화 블럭도 상속되지 않..?)

1. Child클래스는 Parent클래스의 멤버를 상속받는 것으로, 항상 Parent보다 같거나 많은 개수의 멤버를 소유하게 된다. 
2. Child클래스의 인스턴스는 생성될 때 항상 자동으로 Parent클래스의 생성자와 초기화블럭도 같이 실행하게 된다.
3. 상속관계(inheritance)는 곧 포함관계(composite)라 할 수 있다.
4. 클래스간의 관계를 결정할 때는 가능한 한 많은 관계를 맺어주는 것이 좋으며, 코드의 재사용성을 높이기 위해 가능한 클래스들은 모두 상속 관계로 포함시켜주는 것이 좋다.


Q2. 아직 완성되지 않은 여러 클래스들이 있다. 주어진 클래스들의 관계(상속&포함)를 결정해보시오.

class Mammalia { //상속?
    //...
}

class Felidae extends Mammalia { //상속?
    //...
}

class Cat extends Felidae { //상속?
    //...
}

class Tiger extends Cat { //상속?
    //...
}

class DigestiveSystem { //상속?
    Mammalia d;    
    //...
}



《 Chap.7 : 오버라이딩(overriding) ~ Chap.14 : 클래스 패스(classpath) 》

Q1. 패키지를 선언하지 않아도 문제가 없던 이유는? 그럼에도 불구하고 패키지 선언을 해야하는 때는?

자바에서 기본적으로 제공하는 unnamed package 때문, 그럼에도 불구하고 모르겠음


Q2. 조상의 멤버는 조상의 생성자를 통해 초기화되도록 작성하는 것이 바람직하다. 자손 클래스의 생성자에서 조상 클래스의 생성자를 호출해야 하는 이유는 무엇일까?

상속되지 않아서?


Q3. 오버라이딩에 대한 것 중 틀린 것을 고치시오

4 - 생성자는 상속할 수 없다

1. 메서드의 이름, 매개변수, 반환타입은 조상의 메서드와 일치해야 한다
2. 조상의 메서드의 접근제어자가 작성되어 있지 않으면 자손은 아무 제어자나 사용 가능하다
3. 조상 클래스의 메서드보다 예외 수만 적다면 자손의 메서드는 아무 예외나 선언할 수 있다.
4. 조상 클래스의 생성자를 상속하여 자신의 멤버 변수 초기화 코드를 추가한 것은 오버라이딩의 예시이다.

《 Chap.15 : import문 ~ Chap.22 : 캡슐화와 접근 제어자 》

Q1. static 제어자가 사용될 수 없는 곳은? 4 ① 클래스 변수 ② 메서드 ③ 초기화 블럭 ④ 지역 변수


Q2. 접근 제어자를 사용하는 이유 2가지를 서술하시오.

보안
접근을 도와주려고



《 Chap.23 : 다형성(polymorphism) ~ Chap.30 : 인터페이스의 장점 》

Q1. 다형성에 대한 설명 중 틀린 것은? (출처 : 명품JAVA 5장 14번)

4
1) 추상 메소드를 두는 이유는 상속 받는 클래스에서 다형성을 실현하도록 하기 위함이다.  
2) 인터페이스도 구현하는 클래스에서 다형성을 실현하도록 하기 위함이다.  
3) 다형성은 서브클래스들이 슈퍼클래스의 동일한 메소드를 서로 다르게 오버라이딩하여 이루어진다.  
4) 자바에서 다형성은 모호한(ambiguous) 문제를 일으키므로 사용하지 않는 것이 바람직하다.  
5) 참조변수의 다형적인 특징은 메서드의 매개변수에도 적용된다.  


Q2. A와 B에 들어갈 답은?

서로 상속 관계에 있는 타입 간의 형변환은 양방향으로 자유롭게 수행될 수 있으나, 
참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 않는다.
그래서 참조변수가 가리키는 인스턴스의 실제 타입이 무엇인지 [ A ] 연산자를 사용한다.
어떤 타입에 대한 [ A ] 연산의 결과가 [ B ]라는 것은 검사한 타입으로 형변환이 가능하다는 것을 뜻한다. 

 A) instanceof  B) true



《 Chap.31 : 추상 클래스(abstract class) ~ Chap.39 : 인터페이스의 장점 》

Q1.
추상 클래스와 추상 메서드에 대한 설명으로 틀린 것을 모두 고르시오.(2개)

2, 5-오버라이딩?

1) 추상 클래스는 미완성 메서드를 포함하는 클래스이다.
2) 추상 클래스에 대한 인스턴스를 생성할 수 있다.  
3) 추상 클래스는 자손 클래스에 의해 완성된다.  
4) 추상 메서드는 선언부는 작성하고 구현부만 비워둔 메서드이다.
5) 자손 클래스는 오버로딩을 통해 추상 메서드를 구현할 수 있다.   


Q2. 인터페이스에 대한 설명으로 틀린 것을 모두 고르시오.(2개)

1, 3? 

1) 추상 메서드와 상수 만을 멤버로 가지는 일종의 추상 클래스이다.
2) 인터페이스 작성 시 인터페이스명 앞에 'interface'를 붙여 작성할 수 있다.  
3) 인터페이스는 단일 상속만이 가능하다.
4) 인터페이스의 추상 메서드 구현 시 클래스를 확장한다는 의미의 'extends'를 사용한다.
5) 인터페이스의 추상 메서드 중 일부만을 구현한 클래스는 추상 클래스가 된다.
6) 인터페이스의 상속은 인터페이스로부터만 가능하다.
7) 인터페이스의 상속과 구현은 동시에 가능하다.



《 Chap.40 : 내부 클래스의 제어자와 접근성 ~ Chap.50 : 예제 》

Q1. Default method의 특징을 쓰시오.

기억이 안납니다....추상메서드 어쩌구 했던듯...


Q2. Default method가 기존 method와 충돌하는 경우의 규칙 중 틀린 것을 고르시오.

4

1) 필요한 쪽의 메서드와 같은 내용으로 오버라이딩한다.
2) 디폴트 메서드가 무시되고, 조상 클래스의 메서드가 상속된다.
3) 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 한다.
4) 조상 클래스의 메서드가 무시되고, 디폴트 메서드가 상속된다.


Q3. 다음 내부 클래스의 종류와 특징 중 맞는 것을 모두 고르시오.

모르겠다...

1) 스태틱 클래스는 외부 클래스의 인스턴스 멤버를 객체 생성없이 사용할 수 없다. 
2) 인스턴스 클래스는 주로 내부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적이다.
3) 스태틱 클래스는 외부 클래스의 멤버 변수 선언 위치에 선언한다.
4) 지역 클래스는 내부 클래스의 메서드 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다.
5) 익명 클래스는 클래스의 선언을 먼저하고 객체를 생성한다.
6) 내부 클래스에서는 abstract나 final 제어자를 사용할 수 없다.
7) final과 static이 동시에 붙은 변수는 모든 내부 클래스에서 정의가 불가능하다.
8) 내부 클래스는 멤버 변수들처럼 private, protected 접근제어자를 사용할 수 있다.
9) 지역 클래스는 외부 클래스의 인스턴스 멤버와 스태틱 멤버를 사용할 수 없다.



《 Chap.51 : 익명 클래스 ~ Chap.52 : 예제 》

Q1. 다음은 이름이 없는 클래스에 관한 문제이다. O, X를 작성하시오.

찍었어요~!~!

(1) 지역 클래스에 대한 설명이다 ( O)
(2) 여러번 사용할 수 있다( X)
(3) 생성자를 가질 수 없다 ( O)
(4) 다중 상속이 가능하다 ( X)
(5) 컴파일 하면 .class 앞에 숫자가 붙는다 ( O)


Q2. this , this( ), super, super( ) 의 기능을 각각 설명하시오.

모르겟슴니다~!~!

this : 
this( ) : 
super: 
super( ) : 
kcho32 commented 2 years ago
  1. 다음 내용 중 옳은 것과 틀린 것을 구분하고, 틀린 내용은 왜 틀렸는지 서술하시오.

    1. Child클래스는 Parent클래스의 멤버를 상속받는 것으로, 항상 Parent보다 같거나 많은 개수의 멤버를 소유하게 된다.
      1. 옳다
    2. Child클래스의 인스턴스는 생성될 때 항상 자동으로 Parent클래스의 생성자와 초기화블럭도 같이 실행하게 된다.
      1. 생성자와 초기화 블럭은 같이 실행 X, 자손 쪽에서 super()를 통해 초기화 시켜줘야 한다
    3. 상속관계(inheritance)는 곧 포함관계(composite)라 할 수 있다.
      1. is a와 has a의 차이로 어감의 차이가 있다. 다만, 대부분의 경우 포함관계를 사용한다 → 상속관계는 무슨 제약이 많다고...
    4. 클래스간의 관계를 결정할 때는 가능한 한 많은 관계를 맺어주는 것이 좋으며, 코드의 재사용성을 높이기 위해 가능한 클래스들은 모두 상속 관계로 포함시켜주는 것이 좋다.
      1. 모름
  2. 아직 완성되지 않은 여러 클래스들이 있다. 주어진 클래스들의 관계(상속&포함)를 결정해보시오.

    class Mammalia { //상속? //... 최상위(Object를 제외하고) }

    class Felidae extends Mammalia{ //상속? //... }

    class Cat extends Felidae{ //상속? //... }

    class Tiger extends Felidae{ //상속? //... }

    class DigestiveSystem { //상속? //... 상속 불가? 굳이 한다면 Cat이나 Tiger에서 DigestiveSystem을 포함시키는건가? }

  3. 패키지를 선언하지 않아도 문제가 없던 이유는? 그럼에도 불구하고 패키지 선언을 해야하는 때는?

    • 패키지를 선언하지 않아도 자바에서 기본적으로 제공하는 ‘이름 없는 패키지(unnamed package)’에 속하게 되므로
    • 큰 규모의 프로젝트나 클래스 라이브러리를 작성하는 경우에는 미리 패키지를 구성해서 적용해야 한다
  4. 조상의 멤버는 조상의 생성자를 통해 초기화되도록 작성하는 것이 바람직하다. 자손 클래스의 생성자에서 조상 클래스의 생성자를 호출해야 하는 이유는 무엇일까?

    • 각 클래스의 생성자는 해당 클래스에서 선언된 인스턴스 변수의 초기화만을 담당하는 것이 좋기 때문에 조상 클래스로부터 상속 받은 인스턴스의 변수는 조상 클래스의 생성자가 초기화를 해줘야한다. (조상 클래스의 생성자는 조상 클래스의 변수 초기화 담당)
  5. 오버라이딩에 대한 것 중 틀린 것을 고치시오

    1. 메서드의 이름, 매개변수, 반환타입은 조상의 메서드와 일치해야 한다
      1. 맞다
    2. 조상의 메서드의 접근제어자가 작성되어 있지 않으면 자손은 아무 제어자나 사용 가능하다\
      1. public과 protected, default만 가능
      2. public → protected → (default) → private 순으로 좁아지기 때문에, default보다 적은 private로는 변경이 불가하다
    3. 조상 클래스의 메서드보다 예외 수만 적다면 자손의 메서드는 새로운 예외를 선언할 수 있다.
      1. 예외 또한 같은 예외여야 한다
        1. 조상 클래스의 메소드가 상속받은 하위 유형인 자손 클래스의 메소드를 처리할 수 있어야 하는데 새로운 예외가 선언되면 그게 불가능해진다
    4. 조상 클래스의 생성자를 상속하여 자신의 멤버 변수 초기화 코드를 추가한 것은 오버라이딩의 예시이다.
      1. 맞다 --> 내 문제 내가 틀림 -> 생성자는 상속 불가
  6. static 제어자가 사용될 수 없는 곳은? ① 클래스 변수 ② 메서드 ③ 초기화 블럭 ④ 지역 변수

    1. 지역변수
  7. 접근 제어자를 사용하는 이유 2가지를 서술하시오.

    1. 보완상 다른 이의 접근을 막기 위해
    2. 굳이 다른 곳에서 사용되지 않는 메서드나 변수 등을 표현하고자 할 때
  8. 다형성에 대한 설명 중 틀린 것은? (출처 : 명품JAVA 5장 14번)

    1. 추상 메소드를 두는 이유는 상속 받는 클래스에서 다형성을 실현하도록 하기 위함이다.
    2. 인터페이스도 구현하는 클래스에서 다형성을 실현하도록 하기 위함이다.
    3. 다형성은 서브클래스들이 슈퍼클래스의 동일한 메소드를 서로 다르게 오버라이딩하여 이루어진다.
    4. 자바에서 다형성은 모호한(ambiguous) 문제를 일으키므로 사용하지 않는 것이 바람직하다.
    5. 참조변수의 다형적인 특징은 메서드의 매개변수에도 적용된다.
  9. A와 B에 들어갈 답은?

    서로 상속 관계에 있는 타입 간의 형변환은 양방향으로 자유롭게 수행될 수 있으나, 참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 않는다. 그래서 참조변수가 가리키는 인스턴스의 실제 타입이 무엇인지 [ A ] 연산자를 사용한다. 어떤 타입에 대한 [ A ] 연산의 결과가 [ B ]라는 것은 검사한 타입으로 형변환이 가능하다는 것을 뜻한다.

    1. isInstanceOf()
    2. True
  10. 추상 클래스와 추상 메서드에 대한 설명으로 틀린 것을 모두 고르시오.(2개)

    1. 추상 클래스는 미완성 메서드를 포함하는 클래스이다.
    2. 추상 클래스에 대한 인스턴스를 생성할 수 있다. X
    3. 추상 클래스는 자손 클래스에 의해 완성된다.
    4. 추상 메서드는 선언부는 작성하고 구현부만 비워둔 메서드이다.
    5. 자손 클래스는 오버로딩을 통해 추상 메서드를 구현할 수 있다. 오버라이딩
  11. 인터페이스에 대한 설명으로 틀린 것을 모두 고르시오.(2개)

    1. 추상 메서드와 상수 만을 멤버로 가지는 일종의 추상 클래스이다.
    2. 인터페이스 작성 시 인터페이스명 앞에 'interface'를 붙여 작성할 수 있다.
    3. 인터페이스는 단일 상속만이 가능하다.
      1. 다중 상속
    4. 인터페이스의 추상 메서드 구현 시 클래스를 확장한다는 의미의 'extends'를 사용한다.
      1. include
    5. 인터페이스의 추상 메서드 중 일부만을 구현한 클래스는 추상 클래스가 된다.
    6. 인터페이스의 상속은 인터페이스로부터만 가능하다.
    7. 인터페이스의 상속과 구현은 동시에 가능하다.
  12. Default method의 특징을 쓰시오.

    인터페이스에 새로운 메서드를 작성해야 할 때 Default 메소드를 사용한다. 이걸 사용함으로 이미 해당 인터페이스를 구현한 클래스의 수정이 필요가 없다

  13. Default method가 기존 method와 충돌하는 경우의 규칙 중 틀린 것을 고르시오.

    1. 필요한 쪽의 메서드와 같은 내용으로 오버라이딩한다.
    2. 디폴트 메서드가 무시되고, 조상 클래스의 메서드가 상속된다.
    3. 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 한다.
      1. 디폴트 메서드를 필요할시?
    4. 조상 클래스의 메서드가 무시되고, 디폴트 메서드가 상속된다.
  14. 다음 내부 클래스의 종류와 특징 중 맞는 것을 모두 고르시오.

    1. 스태틱 클래스는 외부 클래스의 인스턴스 멤버를 객체 생성없이 사용할 수 없다.
    2. 인스턴스 클래스는 주로 내부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적이다.
    3. 스태틱 클래스는 외부 클래스의 멤버 변수 선언 위치에 선언한다.
    4. 지역 클래스는 내부 클래스의 메서드 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다.
    5. 익명 클래스는 클래스의 선언을 먼저하고 객체를 생성한다. 모름
    6. 내부 클래스에서는 abstract나 final 제어자를 사용할 수 없다.
    7. final과 static이 동시에 붙은 변수는 모든 내부 클래스에서 정의가 불가능하다.
    8. 내부 클래스는 멤버 변수들처럼 private, protected 접근제어자를 사용할 수 있다.
    9. 지역 클래스는 외부 클래스의 인스턴스 멤버와 스태틱 멤버를 사용할 수 없다.
  15. 다음은 이름이 없는 클래스에 관한 문제이다. O, X를 작성하시오.

    (1) 지역 클래스에 대한 설명이다 ( ) (2) 여러번 사용할 수 있다(X) (3) 생성자를 가질 수 없다 ( ) (4) 다중 상속이 가능하다 (X) (5) 컴파일 하면 .class 앞에 숫자가 붙는다 ( )

  16. this , this( ), super, super( ) 의 기능을 각각 설명하시오.

    1. this: 자기 자신을 참조하는 참조변수: 매개변수와 이름이 겹칠 때 구분하기 위해 사용
    2. this(): 자기 자신의 생성자를 참조?
    3. super: 조상 클래스의 인스턴스를 참조하는 참조변수. 조상의 멤버변수를 사용할 때 사용?
    4. super(): 조상 클래스의 생성자를 참조
lemon0913 commented 2 years ago

《 Chap.1 : 상속 ~ Chap.6 : Object클래스 》

Q1. 다음 내용 중 옳은 것과 틀린 것을 구분하고, 틀린 내용은 왜 틀렸는지 서술하시오.

1. Child클래스는 Parent클래스의 멤버를 상속받는 것으로, 항상 Parent보다 같거나 많은 개수의 멤버를 소유하게 된다. -> (O)

2. Child클래스의 인스턴스는 생성될 때 항상 자동으로 Parent클래스의 생성자와 초기화블럭도 같이 실행하게 된다. -> (X, 생성자는 실행하지 않음)

3. 상속관계(inheritance)는 곧 포함관계(composite)라 할 수 있다. -> (O)

4. 클래스간의 관계를 결정할 때는 가능한 한 많은 관계를 맺어주는 것이 좋으며, 코드의 재사용성을 높이기 위해 가능한 클래스들은 모두 상속 관계로 포함시켜주는 것이 좋다. -> (X, 너무 많은 관계를 맺으면 오히려 재사용성이 떨어질 것 같다...???)

Q2. 아직 완성되지 않은 여러 클래스들이 있다. 주어진 클래스들의 관계(상속&포함)를 결정해보시오.

《 Chap.7 : 오버라이딩(overriding) ~ Chap.14 : 클래스 패스(classpath) 》

Q1. 패키지를 선언하지 않아도 문제가 없던 이유는? 그럼에도 불구하고 패키지 선언을 해야하는 때는?

패키지를 선언하지 않으면 컴파일러가 자동으로 이름없는 패키지를 선언해준다. 

복잡한 프로젝트나 서로 관련된 클래스 파일들을 묶는 경우 패키지를 선언해주자.

Q2. 조상의 멤버는 조상의 생성자를 통해 초기화되도록 작성하는 것이 바람직하다. 자손 클래스의 생성자에서 조상 클래스의 생성자를 호출해야 하는 이유는 무엇일까?

조상 클래스로부터 자손클래스로 멤버들이 상속될 때 생성자는 상속되지 않는다.

Q3. 오버라이딩에 대한 것 중 틀린 것을 고치시오.

1. 메서드의 이름, 매개변수, 반환타입은 조상의 메서드와 일치해야 한다 
2. 조상의 메서드의 접근제어자가 작성되어 있지 않으면 자손은 아무 제어자나 사용 가능하다 (X, 자손의 접근제어자의 범위가 조상보다 작으면 안됨. )
3. 조상 클래스의 메서드보다 예외 수만 적다면 자손의 메서드는 아무 예외나 선언할 수 있다.
(X, 자손의 메서드가 선언하는 예외는 조상에서 선언된 것이어야 하고 거기서 범위가 작아져야 할 것 같다...???)
4. 조상 클래스의 생성자를 상속하여 자신의 멤버 변수 초기화 코드를 추가한 것은 오버라이딩의 예시이다.

《 Chap.15 : import문 ~ Chap.22 : 캡슐화와 접근 제어자 》

Q1. static 제어자가 사용될 수 없는 곳은? ① 클래스 변수 ② 메서드 ③ 초기화 블럭 ④ 지역 변수

답이 없음...???

Q2. 접근 제어자를 사용하는 이유 2가지를 서술하시오.

외부로부터 접근을 제어해 클래스의 데이터를 보호하기 위해, 캡슐화

《 Chap.23 : 다형성(polymorphism) ~ Chap.30 : 인터페이스의 장점 》

Q1. 다형성에 대한 설명 중 틀린 것은? (출처 : 명품JAVA 5장 14번)

1) 추상 메소드를 두는 이유는 상속 받는 클래스에서 다형성을 실현하도록 하기 위함이다. 
2) 인터페이스도 구현하는 클래스에서 다형성을 실현하도록 하기 위함이다.  
3) 다형성은 서브클래스들이 슈퍼클래스의 동일한 메소드를 서로 다르게 오버라이딩하여 이루어진다.  
4) 자바에서 다형성은 모호한(ambiguous) 문제를 일으키므로 사용하지 않는 것이 바람직하다.  (X, 다형성 자주 사용함.)
5) 참조변수의 다형적인 특징은 메서드의 매개변수에도 적용된다.  

Q2. A와 B에 들어갈 답은?

서로 상속 관계에 있는 타입 간의 형변환은 양방향으로 자유롭게 수행될 수 있으나, 
참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 않는다.
그래서 참조변수가 가리키는 인스턴스의 실제 타입이 무엇인지 [ A ] 연산자를 사용한다.
어떤 타입에 대한 [ A ] 연산의 결과가 [ B ]라는 것은 검사한 타입으로 형변환이 가능하다는 것을 뜻한다. 
A = instanceof, B = true

《 Chap.31 : 추상 클래스(abstract class) ~ Chap.39 : 인터페이스의 장점 》

Q1.추상 클래스와 추상 메서드에 대한 설명으로 틀린 것을 모두 고르시오.(2개)

1) 추상 클래스는 미완성 메서드를 포함하는 클래스이다.
2) 추상 클래스에 대한 인스턴스를 생성할 수 있다.  
3) 추상 클래스는 자손 클래스에 의해 완성된다.  
4) 추상 메서드는 선언부는 작성하고 구현부만 비워둔 메서드이다.
5) 자손 클래스는 오버로딩을 통해 추상 메서드를 구현할 수 있다.   
-> 2), 5)

Q2. 인터페이스에 대한 설명으로 틀린 것을 모두 고르시오.(2개)

1) 추상 메서드와 상수 만을 멤버로 가지는 일종의 추상 클래스이다.
2) 인터페이스 작성 시 인터페이스명 앞에 'interface'를 붙여 작성할 수 있다.  
3) 인터페이스는 단일 상속만이 가능하다.
4) 인터페이스의 추상 메서드 구현 시 클래스를 확장한다는 의미의 'extends'를 사용한다.
5) 인터페이스의 추상 메서드 중 일부만을 구현한 클래스는 추상 클래스가 된다.
6) 인터페이스의 상속은 인터페이스로부터만 가능하다.
7) 인터페이스의 상속과 구현은 동시에 가능하다.
-> 3), 4)

《 Chap.40 : 내부 클래스의 제어자와 접근성 ~ Chap.50 : 예제 》

Q1. Default method의 특징을 쓰시오.

와...기억 안나요...ㅠㅜㅠㅜ

Q2. Default method가 기존 method와 충돌하는 경우의 규칙 중 틀린 것을 고르시오.

1) 필요한 쪽의 메서드와 같은 내용으로 오버라이딩한다.
2) 디폴트 메서드가 무시되고, 조상 클래스의 메서드가 상속된다.
3) 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 한다.
4) 조상 클래스의 메서드가 무시되고, 디폴트 메서드가 상속된다.
-> 여기서부터 다시 공부하겠습니다..

Q3. 다음 내부 클래스의 종류와 특징 중 맞는 것을 모두 고르시오.

1) 스태틱 클래스는 외부 클래스의 인스턴스 멤버를 객체 생성없이 사용할 수 없다. (x)
2) 인스턴스 클래스는 주로 내부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적이다. (O)
3) 스태틱 클래스는 외부 클래스의 멤버 변수 선언 위치에 선언한다.(X)
4) 지역 클래스는 내부 클래스의 메서드 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다.(O)
5) 익명 클래스는 클래스의 선언을 먼저하고 객체를 생성한다. (X)
6) 내부 클래스에서는 abstract나 final 제어자를 사용할 수 없다. (?)
7) final과 static이 동시에 붙은 변수는 모든 내부 클래스에서 정의가 불가능하다. (?)
8) 내부 클래스는 멤버 변수들처럼 private, protected 접근제어자를 사용할 수 있다. (?)
9) 지역 클래스는 외부 클래스의 인스턴스 멤버와 스태틱 멤버를 사용할 수 없다. (?)

-> 여기서부터 다시 공부하겠습니다..

《 Chap.51 : 익명 클래스 ~ Chap.52 : 예제 》

Q1. 다음은 이름이 없는 클래스에 관한 문제이다. O, X를 작성하시오.

(1) 지역 클래스에 대한 설명이다 ( O )
(2) 여러번 사용할 수 있다( X )
(3) 생성자를 가질 수 없다 ( O )
(4) 다중 상속이 가능하다 ( X )
(5) 컴파일 하면 .class 앞에 숫자가 붙는다 ( O )

Q2. this , this( ), super, super( ) 의 기능을 각각 설명하시오.

this : 클래스 내부의 멤버 변수를 호출할 때 사용
this( ) : 생성자..???
super: 조상 클래스 내부의 멤버 변수를 자손 클래스에서 호출할 때 사용
super( ) : 조상 클래스에서 선언된 생성자를 자손 클래스에서 호출할 때 사용
red-Pen9uin commented 2 years ago

5주차 : 『 7장. 객체지향 프로그래밍 Ⅱ 』

《 Chap.1 : 상속 ~ Chap.6 : Object클래스 》

Q1. 다음 내용 중 옳은 것과 틀린 것을 구분하고, 틀린 내용은 왜 틀렸는지 서술하시오.


Q2. 아직 완성되지 않은 여러 클래스들이 있다. 주어진 클래스들의 관계(상속&포함)를 결정해보시오.



《 Chap.7 : 오버라이딩(overriding) ~ Chap.14 : 클래스 패스(classpath) 》

Q1. 패키지를 선언하지 않아도 문제가 없던 이유는? 그럼에도 불구하고 패키지 선언을 해야하는 때는?


Q2. 조상의 멤버는 조상의 생성자를 통해 초기화되도록 작성하는 것이 바람직하다. 자손 클래스의 생성자에서 조상 클래스의 생성자를 호출해야 하는 이유는 무엇일까?


Q3. 오버라이딩에 대한 것 중 틀린 것을 고치시오



《 Chap.15 : import문 ~ Chap.22 : 캡슐화와 접근 제어자 》

Q1. static 제어자가 사용될 수 없는 곳은?


Q2. 접근 제어자를 사용하는 이유 2가지를 서술하시오.



《 Chap.23 : 다형성(polymorphism) ~ Chap.30 : 인터페이스의 장점 》

Q1. 다형성에 대한 설명 중 틀린 것은? (출처 : 명품JAVA 5장 14번)


Q2. A와 B에 들어갈 답은?


《 Chap.31 : 추상 클래스(abstract class) ~ Chap.39 : Object클래스 》

Q1. 추상 클래스와 추상 메서드에 대한 설명으로 틀린 것을 모두 고르시오.(2개)


Q2. 인터페이스에 대한 설명으로 틀린 것을 모두 고르시오.(2개)



《 Chap.40 : 내부 클래스의 제어자와 접근성 ~ Chap.50 : 예제 》

Q1. Default method의 특징을 쓰시오.


Q2. Default method가 기존 method와 충돌하는 경우의 규칙 중 틀린 것을 고르시오.


Q3. 다음 내부 클래스의 종류와 특징 중 맞는 것을 모두 고르시오.


《 Chap.51 : 익명 클래스 ~ Chap.52 : 예제 》

Q1.다음은 이름이 없는 클래스에 관한 문제이다. O, X를 작성하시오.

(1) 지역 클래스에 대한 설명이다 (X)
(2) 여러번 사용할 수 있다 (X)
(3) 생성자를 가질 수 없다 (X)
(4) 다중 상속이 가능하다 (X)
(5) 컴파일 하면 .class 앞에 숫자가 붙는다 (X)


Q2. this , this( ), super, super( ) 의 기능을 각각 설명하시오.

this : 인스턴스 자신을 가리키는 참조변수
this( ) : 인스턴스의 생성자
super : 조상 클래스의 멤버를 가리키는데 사용하는 참조변수
super( ) : 조상 클래스의 생성자
yummygyudon commented 2 years ago

《 Chap.1 : 상속 ~ Chap.6 : Object클래스 》

Q1. 다음 내용 중 옳은 것과 틀린 것을 구분하고, 틀린 내용은 왜 틀렸는지 서술하시오.

<맞는 것>

  1. Child클래스는 Parent클래스의 멤버를 상속받는 것으로, 항상 Parent보다 같거나 많은 개수의 멤버를 소유하게 된다.
  2. Child클래스의 인스턴스는 생성될 때 항상 자동으로 Parent클래스의 생성자와 초기화블럭도 같이 실행하게 된다.
  3. 클래스간의 관계를 결정할 때는 가능한 한 많은 관계를 맺어주는 것이 좋으며, 코드의 재사용성을 높이기 위해 가능한 클래스들은 모두 상속 관계로 포함시켜주는 것이 좋다.

<틀린 것>

  1. 상속관계(inheritance)는 곧 포함관계(composite)라 할 수 있다. -> 포함 관계는 상속 이외에 재사용할 수 있는 방법 중 하나인데 한 클래스의 멤버변수로 " 다른 클래스 타입의 참조변수를 선언하는 것 "이다.

Q2. 아직 완성되지 않은 여러 클래스들이 있다. 주어진 클래스들의 관계(상속&포함)를 결정해보시오.

class Mammalia { 
    Digestive d = new Digestive();
}

class Felidae extends Mammalia {

}

class Cat extends Felidae{ 
    //...
}

class Tiger extends Felidae { 
   //...
}

class DigestiveSystem { 
    //...
}

《 Chap.7 : 오버라이딩(overriding) ~ Chap.14 : 클래스 패스(classpath) 》

Q1. 패키지를 선언하지 않아도 문제가 없던 이유는? 그럼에도 불구하고 패키지 선언을 해야하는 때는?

같은 이름의 class를 써야할 때?

Q2. 조상의 멤버는 조상의 생성자를 통해 초기화되도록 작성하는 것이 바람직하다. 자손 클래스의 생성자에서 조상 클래스의 생성자를 호출해야 하는 이유는 무엇일까?

각 클래스의 생성자는 그 클래스의 인스턴스 변수의 초기화만 담당하는데 조상클래스의 멤버가 모두 합쳐진 상태로 인스턴스가 생성되고 자손 클래스 멤버가 조상 클래스 멤버를 사용할 수도 있기 때문에 조상 클래스 먼저 초기화하는게 바람직하다.

Q3. 오버라이딩에 대한 것 중 틀린 것을 고치시오

  1. 조상의 메서드의 접근제어자가 작성되어 있지 않으면 자손은 아무 제어자나 사용 가능하다 -> 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없기 때문에 아무 제어자나 사용할 수 없다.

《 Chap.15 : import문 ~ Chap.22 : 캡슐화와 접근 제어자 》

Q1. static 제어자가 사용될 수 없는 곳은?

4번

Q2. 접근 제어자를 사용하는 이유 2가지를 서술하시오.

《 Chap.23 : 다형성(polymorphism) ~ Chap.30 : 인터페이스의 장점 》

Q1. 다형성에 대한 설명 중 틀린 것은? (출처 : 명품JAVA 5장 14번)

4) 자바에서 다형성은 모호한(ambiguous) 문제를 일으키므로 사용하지 않는 것이 바람직하다.

Q2. A와 B에 들어갈 답은?

A : instanceof B : true

《 Chap.31 : 추상 클래스(abstract class) ~ Chap.39 : 인터페이스의 장점 》

Q1. 추상 클래스와 추상 메서드에 대한 설명으로 틀린 것을 모두 고르시오.(2개)

2) 추상 클래스에 대한 인스턴스를 생성할 수 있다.
4) 추상 메서드는 선언부는 작성하고 구현부만 비워둔 메서드이다.

Q2. 인터페이스에 대한 설명으로 틀린 것을 모두 고르시오.(2개)

3) 인터페이스는 단일 상속만이 가능하다. 4) 인터페이스의 추상 메서드 구현 시 클래스를 확장한다는 의미의 'extends'를 사용한다.

《 Chap.40 : 내부 클래스의 제어자와 접근성 ~ Chap.50 : 예제 》

Q1. Default method의 특징을 쓰시오.

-public 제어자 생략 가능 -기존에 인터페이스 구현을 한 클래스에서 추가 완성할 필요없고 안하더라도 추상클래스로 되지 않는다. -여러 인터페이스에서 디폴트 메서드간 충돌이 나면 구현 클래스에서 오버라이딩하고 -조상클래스 멤버 메서드랑 충돌나면 무시당한다.

Q2. Default method가 기존 method와 충돌하는 경우의 규칙 중 틀린 것을 고르시오.

4) 조상 클래스의 메서드가 무시되고, 디폴트 메서드가 상속된다.

Q3. 다음 내부 클래스의 종류와 특징 중 맞는 것을 모두 고르시오.

... 이건 모르겠어유...

1) 스태틱 클래스는 외부 클래스의 인스턴스 멤버를 객체 생성없이 사용할 수 없다. 2) 인스턴스 클래스는 주로 내부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적이다. 3) 스태틱 클래스는 외부 클래스의 멤버 변수 선언 위치에 선언한다. 4) 지역 클래스는 내부 클래스의 메서드 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다. 5) 익명 클래스는 클래스의 선언을 먼저하고 객체를 생성한다. 6) 내부 클래스에서는 abstract나 final 제어자를 사용할 수 없다. 7) final과 static이 동시에 붙은 변수는 모든 내부 클래스에서 정의가 불가능하다. 8) 내부 클래스는 멤버 변수들처럼 private, protected 접근제어자를 사용할 수 있다. 9) 지역 클래스는 외부 클래스의 인스턴스 멤버와 스태틱 멤버를 사용할 수 없다.

《 Chap.51 : 익명 클래스 ~ Chap.52 : 예제 》

Q1. 다음은 이름이 없는 클래스에 관한 문제이다. O, X를 작성하시오.

(1) 지역 클래스에 대한 설명이다 ( X ) (2) 여러번 사용할 수 있다( X ) (3) 생성자를 가질 수 없다 ( X ) (4) 다중 상속이 가능하다 ( X ) (5) 컴파일 하면 .class 앞에 숫자가 붙는다 ( O )

Q2. this , this( ), super, super( ) 의 기능을 각각 설명하시오.

this : 객체 자신을 가르키는 참조변수 this( ) : 객체 내에서 다른 생성자를 호출하는 super: 조상클래스로부터 상속받은 멤버 참조용 참조변수 super( ) : 조상 클래스 생성자

chaesuhyeon commented 2 years ago

《 Chap.1 : 상속 ~ Chap.6 : Object클래스 》

Q1. 다음 내용 중 옳은 것과 틀린 것을 구분하고, 틀린 내용은 왜 틀렸는지 서술하시오.

1. Child클래스는 Parent클래스의 멤버를 상속받는 것으로, 항상 Parent보다 같거나 많은 개수의 멤버를 소유하게 된다. 

2. Child클래스의 인스턴스는 생성될 때 항상 자동으로 Parent클래스의 생성자와 초기화블럭도 같이 실행하게 된다.

3. 상속관계(inheritance)는 곧 포함관계(composite)라 할 수 있다.

4. 클래스간의 관계를 결정할 때는 가능한 한 많은 관계를 맺어주는 것이 좋으며, 코드의 재사용성을 높이기 위해 가능한 클래스들은 모두 상속 관계로 포함시켜주는 것이 좋다.

옳은 것 : 1 틀린 것 : 2 - Parent클래스의 생성자와 초기화블럭은 상속되지 않음 : 3 - 상속관계(inheritance)와 곧 포함관계(composite)는 다름 : 4 - 자바는 단일 상속

Q2. 아직 완성되지 않은 여러 클래스들이 있다. 주어진 클래스들의 관계(상속&포함)를 결정해보시오.

class Mammalia { //상속?
    //...
}

class Felidae { //상속?
    //...
}

class Cat { //상속?
    Cat c = new Cat()
}

class Tiger { //상속?
    Tiget t = new Tiget()
}

class DigestiveSystem { //상속?
    //...
}

<br>

---

## 《 Chap.7 : 오버라이딩(overriding) ~ Chap.14 : 클래스 패스(classpath) 》

**Q1.**
패키지를 선언하지 않아도 문제가 없던 이유는? 그럼에도 불구하고 패키지 선언을 해야하는 때는?
: 자바에서 '이름 없는 패키지"를 기본적으로 제공하기 때문에 오류가 나지 않았음
: 큰 프로젝트나 Java API와 같은 클래스 라이브러리를 작성하는 경우에는 미리 패키지를 구성하여 적용해야 함 
<br>

**Q2.**
조상의 멤버는 조상의 생성자를 통해 초기화되도록 작성하는 것이 바람직하다. 자손 클래스의 생성자에서 조상 클래스의 생성자를 호출해야 하는 이유는 무엇일까?
: 상속 받을 때 조상의 생성자나 초기화블럭은 상속이 되지 않기 때문
<br>

**Q3.**
오버라이딩에 대한 것 중 틀린 것을 고치시오
  1. 메서드의 이름, 매개변수, 반환타입은 조상의 메서드와 일치해야 한다
  2. 조상의 메서드의 접근제어자가 작성되어 있지 않으면 자손은 아무 제어자나 사용 가능하다
  3. 조상 클래스의 메서드보다 예외 수만 적다면 자손의 메서드는 아무 예외나 선언할 수 있다.
  4. 조상 클래스의 생성자를 상속하여 자신의 멤버 변수 초기화 코드를 추가한 것은 오버라이딩의 예시이다.
    
    : 2 - 접근 제어자가 안적혀 있으면 기본적으로 (defualt)라서 자손은 default나 public가능
    : 3 - 같은 예외를 선언해야 한다
    ---
    ## 《 Chap.15 : import문 ~ Chap.22 : 캡슐화와 접근 제어자 》

Q1. static 제어자가 사용될 수 없는 곳은? 4번 ① 클래스 변수 ② 메서드 ③ 초기화 블럭 ④ 지역 변수


Q2. 접근 제어자를 사용하는 이유 2가지를 서술하시오.

  1. 외부에서 함부로 변경하지 못하게 하기위해 외부로부터 접근을 제한
  2. ...? 모르겠음..

《 Chap.23 : 다형성(polymorphism) ~ Chap.30 : 인터페이스의 장점 》

Q1. 다형성에 대한 설명 중 틀린 것은? (출처 : 명품JAVA 5장 14번) 4

1) 추상 메소드를 두는 이유는 상속 받는 클래스에서 다형성을 실현하도록 하기 위함이다.  
2) 인터페이스도 구현하는 클래스에서 다형성을 실현하도록 하기 위함이다.  
3) 다형성은 서브클래스들이 슈퍼클래스의 동일한 메소드를 서로 다르게 오버라이딩하여 이루어진다.  
4) 자바에서 다형성은 모호한(ambiguous) 문제를 일으키므로 사용하지 않는 것이 바람직하다.  
5) 참조변수의 다형적인 특징은 메서드의 매개변수에도 적용된다.  


Q2. A와 B에 들어갈 답은? A: instanceof / B: true

서로 상속 관계에 있는 타입 간의 형변환은 양방향으로 자유롭게 수행될 수 있으나, 
참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 않는다.
그래서 참조변수가 가리키는 인스턴스의 실제 타입이 무엇인지 [ A ] 연산자를 사용한다.
어떤 타입에 대한 [ A ] 연산의 결과가 [ B ]라는 것은 검사한 타입으로 형변환이 가능하다는 것을 뜻한다. 



《 Chap.31 : 추상 클래스(abstract class) ~ Chap.39 : 인터페이스의 장점 》

Q1.
추상 클래스와 추상 메서드에 대한 설명으로 틀린 것을 모두 고르시오.(2개) 2, 5

1) 추상 클래스는 미완성 메서드를 포함하는 클래스이다.
2) 추상 클래스에 대한 인스턴스를 생성할 수 있다.  
3) 추상 클래스는 자손 클래스에 의해 완성된다.  
4) 추상 메서드는 선언부는 작성하고 구현부만 비워둔 메서드이다.
5) 자손 클래스는 오버로딩을 통해 추상 메서드를 구현할 수 있다.   


Q2. 인터페이스에 대한 설명으로 틀린 것을 모두 고르시오.(2개) 3, 4

1) 추상 메서드와 상수 만을 멤버로 가지는 일종의 추상 클래스이다.
2) 인터페이스 작성 시 인터페이스명 앞에 'interface'를 붙여 작성할 수 있다.  
3) 인터페이스는 단일 상속만이 가능하다.
4) 인터페이스의 추상 메서드 구현 시 클래스를 확장한다는 의미의 'extends'를 사용한다.
5) 인터페이스의 추상 메서드 중 일부만을 구현한 클래스는 추상 클래스가 된다.
6) 인터페이스의 상속은 인터페이스로부터만 가능하다.
7) 인터페이스의 상속과 구현은 동시에 가능하다.



《 Chap.40 : 내부 클래스의 제어자와 접근성 ~ Chap.50 : 예제 》

Q1. Default method의 특징을 쓰시오. 흠..뭘까요..

Q2. Default method가 기존 method와 충돌하는 경우의 규칙 중 틀린 것을 고르시오. 4

1) 필요한 쪽의 메서드와 같은 내용으로 오버라이딩한다.
2) 디폴트 메서드가 무시되고, 조상 클래스의 메서드가 상속된다.
3) 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 한다.
4) 조상 클래스의 메서드가 무시되고, 디폴트 메서드가 상속된다.


Q3. 다음 내부 클래스의 종류와 특징 중 맞는 것을 모두 고르시오. 1, 3, 8

1) 스태틱 클래스는 외부 클래스의 인스턴스 멤버를 객체 생성없이 사용할 수 없다. 
2) 인스턴스 클래스는 주로 내부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적이다.
3) 스태틱 클래스는 외부 클래스의 멤버 변수 선언 위치에 선언한다.
4) 지역 클래스는 내부 클래스의 메서드 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다.
5) 익명 클래스는 클래스의 선언을 먼저하고 객체를 생성한다.
6) 내부 클래스에서는 abstract나 final 제어자를 사용할 수 없다.
7) final과 static이 동시에 붙은 변수는 모든 내부 클래스에서 정의가 불가능하다.
8) 내부 클래스는 멤버 변수들처럼 private, protected 접근제어자를 사용할 수 있다.
9) 지역 클래스는 외부 클래스의 인스턴스 멤버와 스태틱 멤버를 사용할 수 없다.



《 Chap.51 : 익명 클래스 ~ Chap.52 : 예제 》

Q1. 다음은 이름이 없는 클래스에 관한 문제이다. O, X를 작성하시오.

(1) 지역 클래스에 대한 설명이다 (X)  --> 익명 클래스 
(2) 여러번 사용할 수 있다(X) --> 클래스의 선언과 객체 생성을 동시에 하기 때문에 한 번 사용
(3) 생성자를 가질 수 없다 (O ) --> 이름이 없기 때문에 생성자를 가질 수 없음
(4) 다중 상속이 가능하다 (X) --> 하나의 클래스를 상속받거나, 하나의 인터페이스만 구현할 수 있음
(5) 컴파일 하면 .class 앞에 숫자가 붙는다 (O ) --> ex) Ex7_17$1. class


Q2. this , this( ), super, super( ) 의 기능을 각각 설명하시오.

this : 멤버 변수와 지역변수의 이름이 같을 때 구분 짓기 위해 사용
this( ) : 같은 클래스의 다른 생성자를 호출하는데 사용
super: 자손 클래스에서 조상클래스로부터 상속받은 멤버를 참조하는데 사용
super( ) : 조상의 생성자를 호출하는데 사용