ToBeMaster-JAVA / Standard-JAVA-Basic

0 stars 0 forks source link

12주차 학습 #13

Open red-Pen9uin opened 2 years ago

red-Pen9uin commented 2 years ago

1. 교재

📕 Java의 정석_기초편 -제 2권- : 「Chapter 12. 지네릭스, 열거형, 애너테이션」 끝까지

기간 : 2022.03.12 ~ 2022.03.18

*방법은 이전과 동일


2. 준비 문제

image

chaesuhyeon commented 2 years ago

《 Chap.1 : 지네릭스 ~ Chap.6 : 지네릭 타입과 다형성 예제 》

Q1. 지네릭 타입에 대한 내용으로 틀린 것을 고르시오. 2번 / 똑같이 extends사용

1. 와일드 카드를 이용해 여러 타입에 대응하는 지네릭 타입을 이용할 수 있다.
2. 지네릭 클래스가 특정 인터페이스를 상속받은 클래스들을 이용하도록 만들기 위해서는 인터페이스 생성때와 똑같이 implements 키워드를 사용할 수 있다.
3. 어떤 지네릭 메서드가 매개변수로 <T>를 받고 리턴타입으로 <T>를 반환할 때 두 <T>는 항상 동일하다.
4. 지네릭 타입과 원시 타입간의 형변환은 경고를 발생시키지만, 사용하지 않는 것을 권장하고 있다.
5. <? extends Object>를 줄여서 <?>로 쓸 수 있다.


Q2. 다음은 제네릭 클래스를 정의한 코드의 일부이다. 아래 코드에서 지네릭 타입을 제거해보시오. 모르겠슴다...

class Box<T extends Fruit> {
    void add(T t) {
        //...
    }

    T get (int i) {
        return list.get(i);
    }
}



《 Chap.7 : Iterator ~ Chap.13 : 와일드 카드 》

Q1 . 다음의 OX 문제를 푸시오. 틀린 것은 이유를 적으시오.

(1) Iterator에 제네릭스를 적용하려면 형변환이 필요하다. (X) ->필요없음

(2) Hashmap 같은 클래스는 지정해줘야할 타입이 2가지이다. 이 2 종류의 타입을 구분할 때에는 “.”으로 구분한다. (X)  -> ','콤마

(3) 클래스를 구현할 때 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. (O) O

(4) 인터페이스를 구현할 때에도 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. (O) O

(5) 제네릭 타입의 배열을 생성하는 것은 허용되지 않는다. (O / X) O

(6) 제네릭 클래스의 객체를 생성할 때, 객체별로 다른 타입을 지정할 수 있으며 static 멤버를 사용할 수 있다. (X)  ->static 멤버 사용 못함. 같은 값을 가져야하는데 그러지 못하기 때문

(7) 제네릭 클래스를 생성할 때, 참조변수에 지정된 제네릭 타입과 생성자에 지정된 제네릭 타입은 일치해야 하기 때문에, 만약 두가지의 타입 변수가 상속관계에 있다하더라도 에러가 발생한다. (O)


Q2. 다음은 와일드 카드에 대한 설명이다. 빈칸에 들어갈 알맞은 것을 쓰시오.

< (a) > 와일드 카드의 상한을 제한하며 O와 그 자손들만 가능하다.

< (b) > 와일드 카드의 하한을 제한하며 E와 그 조상들만 가능하다.

< (c) > 제한이 없으며 모든 타입이 가능하다.

< (c) >는 < (d) > 와 동일하다.

(a) : <? extends O> (b) : <? super E> (c) : <?> (d) : <? extends Object>



《 Chap.14 : 지네릭 메서드 ~ Chap.20 : 열거형 예제 》

Q1. 코드에 나온 T 중 같은 것을 의미하는 것끼리 묶어주세요. 1,2

class Problem1<1. T> {
    ArrayList<2. T> answers = new ArrayList<3. T>();
    static <4. T> method1(List<5. T> list, ...) {...}
}


Q2. 가능하면 O, 불가능하면 X

Box box = null;
Box<Object> objectBox = null;
Box<String> strBox = null;
  1. objBox = (Box)strBox; X
  2. box = (Box)objBox; O
  3. objBox = (Box)objBox; O
  4. strBox = (Box)objBox; X
  5. Box objBox = (Box)new Box(); X
  6. Box<? extends Object> wBox = new Box(); O


  7. 《 Chap.21 : 열거형에 멤버 추가하기 ~ Chap.26 : @Deprecated 》

    Q1. 아래 코드를 컴파일 했을 때 에러 메시지가 나는지, 난다면 어떠한 이유로 나는지 서술하시오.

    class Parent {
        void parentMethod() {}
    }
    
    class Child extends Parent {
        @Override
        void parentmethod() {}
    }

    메서드가 오버라이드된 메서드가 아니기 때문에 (철자 틀림) 오버라이딩된 메서드가 아니라고 에러메세지 발생

    Q2. 더 이상 사용되지 않는 필드나 메서드에 붙어 이 애너테이션이 붙은 대상은 다른 것으로 대체되었으니 더 이상 사용하지 않는 것을 권한다는 의미로 사용되는 애너테이션은 다음 중 무엇인가? 4번

    1)@SuppressWarnings
    
    2)@SafeVarargs
    
    3)@Target*
    
    4)@Deprecated



    《 Chap.27 : FunctionalInterface ~ Chap.33 : @Repeatable 》

    Q1. 다음 중 맞으면 O, 틀리면 X를 표시하고 맞게 고치시오.

    A. 함수형 인터페이스는 여러 개의 추상메서드를 가질 수 있다. X --> 단 하나의 추상메서드만 가질 수 있음
    B. @SuppressWarings를 사용할 때는 `( )`안에 경고의 종류를 문자열로 지정하는데, 한개의 경고만 지정할 수 있다. X --> 여러 개의 경고를 지정할 수 있으며 @SupperessWarings({"unchecked", "deprecation"})과 같이 작성하면 됨
    C. 컴파일러의 경고 내용을 자세히 보기 위해서는 -Xlint옵션을 사용하면 된다.
    D. 컴파일러에 의해 사용되는 애너테이션의 유지 정책은 RUNTIME이고, 실행 시에 사용 가능한 애너테이션의 정책은SOURCE 이다. X --> 앞 뒤 반대로,,, SOURCE / RUNTIME
    


    Q2. 다음 코드는 @Target을 사용했을 때의 코드이다. 각각의 적용대상을 적으시오.

    대상타입
    ANNOTATION_TYPE
    CONSTRUCTOR
    FIELD
    LOCAL_VARIABLE
    METHOD
    PACKAGE
    PARAMETER
    TYPE
    TYPE_PARAMETER
    TYPE_USE
    @Target({FIELD, TYPE, TYPE_USE})
    public @interface MyAnnotation { } // MyAnnotation 정의
    
    @MyAnnotation  // 적용 대상이 ① 인 경우
    class MyClass {
        @MyAnnotation // 적용 대상이 ② 인 경우
        int i;
    
        @MyAnnotation // 적용 대상이 ③ 인 경우
        MyClass mc;
    }
    

    ①: TYPE ②: FIELD ③: TYPE_USE



    《 Chap.34 : 애너테이션 타입 정의하기 ~ Chap.39 : 애너테이션의 활용 예제 》

    Q1. 다음은 애너테이션의 요소를 설명한 글이다. 빈칸에 들어갈 단어는?

    1. 애너테이션 적용시, 값을 지정하지 않으면 사용될 수 있는 (가) 지정 가능 (null 제외) defualt값 
    2. 요소가 하나이고 이름이 value 일 때는 요소의 (나) 생략 가능 : 이름
    3. 요소의 타입이 배열인 경우, (다)를 사용해야 함 : { }


    Q2. 다음은 애너테이션 요소의 규칙이다. 틀린 것은? (1개) 1번

    1. 요소의 타입은 참조형, Integer, enum, 애너테이션, Class만 허용됨 --> 참조형이 아닌 기본형
    2. () 안에 매개변수를 선언할 수 없음
    3. 예외를 선언할 수 없음
    4. 요소를 타입 매개변수로 정의할 수 없음


    kcho32 commented 2 years ago
    1. 지네릭 타입에 대한 내용으로 틀린 것을 고르시오.

      1. 와일드 카드를 이용해 여러 타입에 대응하는 지네릭 타입을 이용할 수 있다.
      2. 지네릭 클래스가 특정 인터페이스를 상속받은 클래스들을 이용하도록 만들기 위해서는 인터페이스 생성때와 똑같이 implements 키워드를 사용할 수 있다.
      3. 어떤 지네릭 클래스 A에 포함된 지네릭 메서드가 매개변수로 를 받고 리턴타입으로 를 반환할 때 두 는 항상 동일하다.
      4. 지네릭 타입과 원시 타입간의 형변환은 경고를 발생시키지만, 사용하지 않는 것을 권장하고 있다.
      5. <? extends Object>를 줄여서 <?>로 쓸 수 있다.
    2. 다음은 제네릭 클래스를 정의한 코드의 일부이다. 아래 코드에서 지네릭 타입을 제거해보시오.

      class Box<T extends Fruit> {
              void add(Fruit t) {
              //...
              }
      
              Fruit get (int i) {
                  return list.get(i);
              }
      }
    3. 다음의 OX 문제를 푸시오. 틀린 것은 이유를 적으시오.

      (1) Iterator에 제네릭스를 적용하려면 형변환이 필요하다. (O / X) X

      (2) Hashmap 같은 클래스는 지정해줘야할 타입이 2가지이다. 이 2 종류의 타입을 구분할 때에는 “.”으로 구분한다. (O / X) X ( , 로 구분)

      (3) 클래스를 구현할 때 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. (O / X) O (extends Test)의 경우 Test와 그 자손

      (4) 인터페이스를 구현할 때에도 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. (O / X) O ? 헷갈림

      (5) 제네릭 타입의 배열을 생성하는 것은 허용되지 않는다. (O / X) O 선언만 가능

      (6) 제네릭 클래스의 객체를 생성할 때, 객체별로 다른 타입을 지정할 수 있으며 static 멤버를 사용할 수 있다. (O / X) X (static 멤버는 클래스의 인스턴스들 전체가 공유 → 제네릭은 다르게 사용하기 위한 기능)

      (7) 제네릭 클래스를 생성할 때, 참조변수에 지정된 제네릭 타입과 생성자에 지정된 제네릭 타입은 일치해야 하기 때문에, 만약 두가지의 타입 변수가 상속관계에 있다하더라도 에러가 발생한다. (O / X) O

    4. 다음은 와일드 카드에 대한 설명이다. 빈칸에 들어갈 알맞은 것을 쓰시오.

      < ? super T > 와일드 카드의 상한을 제한하며 O와 그 자손들만 가능하다.

      < ? extends T > 와일드 카드의 하한을 제한하며 E와 그 조상들만 가능하다.

      < ? > 제한이 없으며 모든 타입이 가능하다.

      < ? >는 < ? extends Object > 와 동일하다.

    5. 코드에 나온 T 중 같은 것을 의미하는 것끼리 묶어주세요.

      class Problem1<1. T> {
          ArrayList<2. T> answers = new ArrayList<3. T>();
          static <4. T> method1(List<5. T> list, ...) {...}
      }

      (1, 2, 3) (4, 5)

    6. 가능하면 O, 불가능하면 X

      Box box = null;
      Box<Object> objectBox = null;
      Box<String> strBox = null;
      1. objBox = (Box)strBox;
      2. box = (Box)objBox;
      3. objBox = (Box)objBox;
      4. strBox = (Box)objBox;
      5. Box objBox = (Box)new Box();
      6. Box<? extends Object> wBox = new Box();
        1. X → 다른 제네릭 타입간 형변화 불가 (Object 포함)
        2. O → 제네릭 to 원시 타입
        3. O → 원시 to 제네릭 타입
        4. X → 제네릭 to 제네릭
        5. X → new Box → Box로 불가 제네릭 to 제네릭
        6. O → 와일드 카드로 아무 타입이나 받아 올 수 있음 Object는 최상위이므로 다른 모든게 자손이라..
        7. 아래 코드를 컴파일 했을 때 에러 메시지가 나는지, 난다면 어떠한 이유로 나는지 서술하시오.

          class Parent {
              void parentMethod() {}
          }
          
          class Child extends Parent {
              @Override
              void parentmethod() {}
          }

          오버라이드하려면 메소드 이름이 같아야함. parentmethod → parentMethod

        8. 더 이상 사용되지 않는 필드나 메서드에 붙어 이 애너테이션이 붙은 대상은 다른 것으로 대체되었으니 더 이상 사용하지 않는 것을 권한다는 의미로 사용되는 애너테이션은 다음 중 무엇인가?

          1. @SuppressWarnings
          2. @SafeVarargs
          3. @Target*
          4. @Deprecated
        9. 다음 중 맞으면 O, 틀리면 X를 표시하고 맞게 고치시오.

          1. 함수형 인터페이스는 여러개의 추상메서드를 가질 수 있다. X (하나만)
          2. @SuppressWarings를 사용할 때는 ( )안에 경고의 종류를 문자열로 지정하는데, 한개의 경고만 지정할 수 있다. X ({”1”, “2”, ... })
          3. 컴파일러의 경고 내용을 자세히 보기 위해서는 -Xlint옵션을 사용하면 된다. O?
          4. 컴파일러에 의해 사용되는 애너테이션의 유지 정책은 RUNTIME이고, 실행 시에 사용 가능한 애너테이션의 정책은SOURCE 이다. X (반대, 말그래도 RUNTIME 은 실행시)
        10. 다음 코드는 @Target을 사용했을 때의 코드이다. 각각의 적용대상을 적으시오.

          @Target({FIELD, TYPE, TYPE_USE})
          public @interface MyAnnotation { } // MyAnnotation 정의
          
          @MyAnnotation  // 적용 대상이 ① 인 경우
          class MyClass {
              @MyAnnotation // 적용 대상이 ② 인 경우
              int i;
          
              @MyAnnotation // 적용 대상이 ③ 인 경우
              MyClass mc;
          }
          1. TYPE
          2. FIELD
          3. TYPE_USE
        11. 다음은 애너테이션의 요소를 설명한 글이다. 빈칸에 들어갈 단어는

        12. 애너테이션 적용시, 값을 지정하지 않으면 사용될 수 있는 (기본값?) 지정 가능 (null 제외)

        13. 요소가 하나이고 이름이 value 일 때는 요소의 (이름) 생략 가능

        14. 요소의 타입이 배열인 경우, (중괄호)를 사용해야 함

        15. 다음은 애너테이션 요소의 규칙이다. 틀린 것은? (1개)

          1. 요소의 타입은 참조형, Integer, enum, 애너테이션, Class만 허용됨
          2. () 안에 매개변수를 선언할 수 없음
          3. 예외를 선언할 수 없음
          4. 요소를 타입 매개변수로 정의할 수 없음
        16. 01stone commented 2 years ago

          《 Chap.1 : 지네릭스 ~ Chap.6 : 지네릭 타입과 다형성 예제 》

          Q1. 지네릭 타입에 대한 내용으로 틀린 것을 고르시오.

          답 : 3?  원주님이 내신 문ㅈㅔ...맞죠...
          
          1. 와일드 카드를 이용해 여러 타입에 대응하는 지네릭 타입을 이용할 수 있다.
          2. 지네릭 클래스가 특정 인터페이스를 상속받은 클래스들을 이용하도록 만들기 위해서는 인터페이스 생성때와 똑같이 implements 키워드를 사용할 수 있다.
          3. 어떤 지네릭 메서드가 매개변수로 <T>를 받고 리턴타입으로 <T>를 반환할 때 두 <T>는 항상 동일하다.
          4. 지네릭 타입과 원시 타입간의 형변환은 경고를 발생시키지만, 사용하지 않는 것을 권장하고 있다.
          5. <? extends Object>를 줄여서 <?>로 쓸 수 있다.


          Q2. 다음은 제네릭 클래스를 정의한 코드의 일부이다. 아래 코드에서 지네릭 타입을 제거해보시오.

          class Box {
              void add(Fruit t) {
                  //...
              }
          
              Fruit get (int i) {
                  return (Fruit)list.get(i);
              }
          }



          《 Chap.7 : Iterator ~ Chap.13 : 와일드 카드 》

          Q1 . 다음의 OX 문제를 푸시오. 틀린 것은 이유를 적으시오.

          (1) X Iterator에 제네릭스를 적용하려면 형변환이 필요하다.
          
          (2) X Hashmap 같은 클래스는 지정해줘야할 타입이 2가지이다. 이 2 종류의 타입을 구분할 때에는 “.”으로 구분한다. 
          
          (3) O 클래스를 구현할 때 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. 
          
          (4) O 인터페이스를 구현할 때에도 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. 
          
          (5) O 제네릭 타입의 배열을 생성하는 것은 허용되지 않는다.
          
          (6) X 제네릭 클래스의 객체를 생성할 때, 객체별로 다른 타입을 지정할 수 있으며 static 멤버를 사용할 수 있다.
          
          (7) O 제네릭 클래스를 생성할 때, 참조변수에 지정된 제네릭 타입과 생성자에 지정된 제네릭 타입은 일치해야 하기 때문에, 
              만약 두가지의 타입 변수가 상속관계에 있다하더라도 에러가 발생한다. (O / X)
          


          Q2. 다음은 와일드 카드에 대한 설명이다. 빈칸에 들어갈 알맞은 것을 쓰시오.

          (a) ? extends O
          (b) ? super E
          (c) ?
          (d) ? extends Object
          
          < (a) > 와일드 카드의 상한을 제한하며 O와 그 자손들만 가능하다.
          
          < (b) > 와일드 카드의 하한을 제한하며 E와 그 조상들만 가능하다.
          
          < (c) > 제한이 없으며 모든 타입이 가능하다.
          
          < (c) >는 < (d) > 와 동일하다.
          



          《 Chap.14 : 지네릭 메서드 ~ Chap.20 : 열거형 예제 》

          Q1. 코드에 나온 T 중 같은 것을 의미하는 것끼리 묶어주세요.

          4-5?
          class Problem1<1. T> {
              ArrayList<2. T> answers = new ArrayList<3. T>();
              static <4. T> method1(List<5. T> list, ...) {...}
          }


          Q2. 가능하면 O, 불가능하면 X

          Box box = null;
          Box<Object> objectBox = null;
          Box<String> strBox = null;
          1. X objBox = (Box)strBox;
          2. O box = (Box)objBox;
          3. O objBox = (Box)objBox;
          4. X strBox = (Box)objBox;
          5. X Box objBox = (Box)new Box();
          6. O Box<? extends Object> wBox = new Box();


          7. 《 Chap.21 : 열거형에 멤버 추가하기 ~ Chap.26 : @Deprecated 》

            Q1. 아래 코드를 컴파일 했을 때 에러 메시지가 나는지, 난다면 어떠한 이유로 나는지 서술하시오.

            Error : Parent(조상)가 없다면 에러메세지
            
            class Parent {
                void parentMethod() {}
            }
            
            class Child extends Parent {
                @Override
                void parentmethod() {}
            }


            Q2. 더 이상 사용되지 않는 필드나 메서드에 붙어 이 애너테이션이 붙은 대상은 다른 것으로 대체되었으니 더 이상 사용하지 않는 것을 권한다는 의미로 사용되는 애너테이션은 다음 중 무엇인가?

            답 : 4
            
            1)@SuppressWarnings
            
            2)@SafeVarargs
            
            3)@Target*
            
            4)@Deprecated



            《 Chap.27 : FunctionalInterface ~ Chap.33 : @Repeatable 》

            Q1. 다음 중 맞으면 O, 틀리면 X를 표시하고 맞게 고치시오.

            A. X - 한개 : 함수형 인터페이스는 여러개의 추상메서드를 가질 수 있다.
            B. X - 중괄호 쓰면 2개이상 가능 : @SuppressWarings를 사용할 때는 `( )`안에 경고의 종류를 문자열로 지정하는데, 한개의 경고만 지정할 수 있다.
            C. O 컴파일러의 경고 내용을 자세히 보기 위해서는 -Xlint옵션을 사용하면 된다.
            D. O 컴파일러에 의해 사용되는 애너테이션의 유지 정책은 RUNTIME이고, 실행 시에 사용 가능한 애너테이션의 정책은SOURCE 이다.
            


            Q2. 다음 코드는 @Target을 사용했을 때의 코드이다. 각각의 적용대상을 적으시오.

            대상타입
            ANNOTATION_TYPE 애너테이션
            CONSTRUCTOR 생성자
            FIELD 필드
            LOCAL_VARIABLE 지역변수
            METHOD 메서드
            PACKAGE 패키지
            PARAMETER 매개변수
            TYPE 타입
            TYPE_PARAMETER 타입매개변수
            TYPE_USE 타입이 사용되는 모든 곳
            @Target({FIELD, TYPE, TYPE_USE})
            public @interface MyAnnotation { } // MyAnnotation 정의
            
            @MyAnnotation  // 적용 대상이 ① 인 경우
            class MyClass {
                @MyAnnotation // 적용 대상이 ② 인 경우
                int i;
            
                @MyAnnotation // 적용 대상이 ③ 인 경우
                MyClass mc;
            }
            

            ①:
            Type ②:
            Field ③:
            Type_use



            《 Chap.34 : 애너테이션 타입 정의하기 ~ Chap.39 : 애너테이션의 활용 예제 》

            Q1. 다음은 애너테이션의 요소를 설명한 글이다. 빈칸에 들어갈 단어는?

            답 : (가) : 기본값, (나) : 이름, (다) : 괄호/{}/중괄호
            
            1. 애너테이션 적용시, 값을 지정하지 않으면 사용될 수 있는 (가) 지정 가능 (null 제외)
            2. 요소가 하나이고 이름이 value 일 때는 요소의 (나) 생략 가능
            3. 요소의 타입이 배열인 경우, (다)를 사용해야 함


            Q2. 다음은 애너테이션 요소의 규칙이다. 틀린 것은? (1개)

            답 : 1
            
            1. 요소의 타입은 참조형, Integer, enum, 애너테이션, Class만 허용됨
            2. () 안에 매개변수를 선언할 수 없음
            3. 예외를 선언할 수 없음
            4. 요소를 타입 매개변수로 정의할 수 없음


            lemon0913 commented 2 years ago

            《 Chap.1 : 지네릭스 ~ Chap.6 : 지네릭 타입과 다형성 예제 》

            Q1.

            3)

            Q2.

            class Box {
                void add(Object t) {
                    //...
                }
            
                Object get (int i) {
                    return (Fruit)list.get(i);
                }
            }

            《 Chap.7 : Iterator ~ Chap.13 : 와일드 카드 》

            Q1

            (1) Iterator에 제네릭스를 적용하려면 형변환이 필요하다. (X) -> 필요없다
            
            (2) Hashmap 같은 클래스는 지정해줘야할 타입이 2가지이다. 이 2 종류의 타입을 구분할 때에는 “.”으로 구분한다. (X) -> ","으로 구분한다
            
            (3) 클래스를 구현할 때 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. (O)
            
            (4) 인터페이스를 구현할 때에도 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. (O)
            
            (5) 제네릭 타입의 배열을 생성하는 것은 허용되지 않는다. (O)
            
            (6) 제네릭 클래스의 객체를 생성할 때, 객체별로 다른 타입을 지정할 수 있으며 static 멤버를 사용할 수 있다. (?)
            
            (7) 제네릭 클래스를 생성할 때, 참조변수에 지정된 제네릭 타입과 생성자에 지정된 제네릭 타입은 일치해야 하기 때문에, 만약 두가지의 타입 변수가 상속관계에 있다하더라도 에러가 발생한다. (O)
            

            Q2

            (a) : <? extend >
            (b) : <? super >
            (c) : <?>
            (d) : <? extend Object>

            《 Chap.14 : 지네릭 메서드 ~ Chap.20 : 열거형 예제 》

            Q1

            1,2,3
            4,5

            Q2

            1. X
            2. O
            3. X
            4. X
            5. O
            6. O

            《 Chap.21 : 열거형에 멤버 추가하기 ~ Chap.26 : @Deprecated 》

            Q1

            @Override에 의해 에러 메시지가 남.
            @Override는 함수가 조상클래스에 없는 함수일 경우 에러 메시지를 낸다.

            Q2

            4)

            《 Chap.27 : FunctionalInterface ~ Chap.33 : @Repeatable 》

            Q1

            A. 함수형 인터페이스는 여러개의 추상메서드를 가질 수 있다.
            B. @SuppressWarings를 사용할 때는 `( )`안에 경고의 종류를 문자열로 지정하는데, 한개의 경고만 지정할 수 있다. 
            -> X, 여러개 가능
            C. 컴파일러의 경고 내용을 자세히 보기 위해서는 -Xlint옵션을 사용하면 된다. 
            -> O
            D. 컴파일러에 의해 사용되는 애너테이션의 유지 정책은 RUNTIME이고, 실행 시에 사용 가능한 애너테이션의 정책은SOURCE 이다. 
            -> X, 둘이 반대임.

            Q2

            《 Chap.34 : 애너테이션 타입 정의하기 ~ Chap.39 : 애너테이션의 활용 예제 》

            Q1

            (가) 기본 값
            (나) 이름
            (다) {}

            Q2

            1)
            red-Pen9uin commented 2 years ago

            《 Chap.1 : 지네릭스 ~ Chap.6 : 지네릭 타입과 다형성 예제 》

            Q1. 지네릭 타입에 대한 내용으로 틀린 것을 고르시오.

            1. 와일드 카드를 이용해 여러 타입에 대응하는 지네릭 타입을 이용할 수 있다.
            2. 지네릭 클래스가 특정 인터페이스를 상속받은 클래스들을 이용하도록 만들기 위해서는 인터페이스 생성때와 똑같이 implements 키워드를 사용할 수 있다.
            3. 어떤 지네릭 클래스 A<T>에 포함된 지네릭 메서드가 매개변수로 <T>를 받고 리턴타입으로 <T>를 반환할 때 두 <T>는 항상 동일하다.
            4. 지네릭 타입과 원시 타입간의 형변환은 경고를 발생시키지만, 사용하지 않는 것을 권장하고 있다.
            5. <? extends Object>를 줄여서 <?>로 쓸 수 있다.

            2, 3


            Q2. 다음은 제네릭 클래스를 정의한 코드의 일부이다. 아래 코드에서 지네릭 타입을 제거해보시오.

            class Box<T extends Fruit> {
                //...
                void add(T t) {
                    //...
                }
            
                T get (int i) {
                    return list.get(i);
                }
            }
            class Box<T extends Fruit> {
                //...
                void add(Fruit t) {
                    //...
                }
            
                Fruit get (int i) {
                    return (Fruit)list.get(i);
                }
            }



            《 Chap.7 : Iterator ~ Chap.13 : 와일드 카드 》

            Q1 . 다음의 OX 문제를 푸시오. 틀린 것은 이유를 적으시오.

            (1) Iterator에 제네릭스를 적용하려면 형변환이 필요하다. (O / X)
            X, 필요 없음
            
            (2) Hashmap 같은 클래스는 지정해줘야할 타입이 2가지이다. 이 2 종류의 타입을 구분할 때에는 “.”으로 구분한다. (O / X)
            X, 콤마로 구분
            
            (3) 클래스를 구현할 때 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. (O / X)
            O
            
            (4) 인터페이스를 구현할 때에도 제네릭 타입에 “extends”를 사용하면 특정 타입의 자손들만 대입할 수 있도록 제한할 수 있다. (O / X)
            O
            
            (5) 제네릭 타입의 배열을 생성하는 것은 허용되지 않는다. (O / X)
            O
            
            (6) 제네릭 클래스의 객체를 생성할 때, 객체별로 다른 타입을 지정할 수 있으며 static 멤버를 사용할 수 있다. (O / X)
            O
            
            (7) 제네릭 클래스를 생성할 때, 참조변수에 지정된 제네릭 타입과 생성자에 지정된 제네릭 타입은 일치해야 하기 때문에, 만약 두가지의 타입 변수가 상속관계에 있다하더라도 에러가 발생한다. (O / X)
            X 참조변수에 지정된 타입과 생성자에 지정된 타입이 상속관계에 있다면 에러가 발생하지 않는다.
            


            Q2. 다음은 와일드 카드에 대한 설명이다. 빈칸에 들어갈 알맞은 것을 쓰시오.

            < (a) > 와일드 카드의 상한을 제한하며 O와 그 자손들만 가능하다.
            ? extends
            
            < (b) > 와일드 카드의 하한을 제한하며 E와 그 조상들만 가능하다.
            ? super T
            
            < (c) > 제한이 없으며 모든 타입이 가능하다.
            ?
            
            < (c) >는 < (d) > 와 동일하다.
            ? extends Object



            《 Chap.14 : 지네릭 메서드 ~ Chap.20 : 열거형 예제 》

            Q1. 코드에 나온 T 중 같은 것을 의미하는 것끼리 묶어주세요.

            class Problem1<1. T> {
                ArrayList<2. T> answers = new ArrayList<3. T>();
                static <4. T> method1(List<5. T> list, ...) {...}
            }

            1,2

            1,4


            Q2. 가능하면 O, 불가능하면 X

            Box box = null;
            Box<Object> objectBox = null;
            Box<String> strBox = null;
            1. objBox = (Box)strBox; (X)
            2. box = (Box)objBox; (O)
            3. objBox = (Box)objBox; (O)
            4. strBox = (Box)objBox; (X)
            5. Box objBox = (Box)new Box(); (X)
            6. Box<? extends Object> wBox = new Box(); (O)


            7. 《 Chap.21 : 열거형에 멤버 추가하기 ~ Chap.26 : @Deprecated 》

              Q1. 아래 코드를 컴파일 했을 때 에러 메시지가 나는지, 난다면 어떠한 이유로 나는지 서술하시오.

              class Parent {
                  void parentMethod() {}
              }
              
              class Child extends Parent {
                  @Override
                  void parentmethod() {}
              }

              오버라이딩하려 했으나 기존 함수와 이름이 다르기 때문에 오류가 발생한다.


              Q2. 더 이상 사용되지 않는 필드나 메서드에 붙어 이 애너테이션이 붙은 대상은 다른 것으로 대체되었으니 더 이상 사용하지 않는 것을 권한다는 의미로 사용되는 애너테이션은 다음 중 무엇인가?

              1)@SuppressWarnings
              
              2)@SafeVarargs
              
              3)@Target*
              
              4)@Deprecated

              4



              《 Chap.27 : FunctionalInterface ~ Chap.33 : @Repeatable 》

              Q1. 다음 중 맞으면 O, 틀리면 X를 표시하고 맞게 고치시오.

              A. 함수형 인터페이스는 여러개의 추상메서드를 가질 수 있다.
              X, 하나만
              
              B. @SuppressWarings를 사용할 때는 `( )`안에 경고의 종류를 문자열로 지정하는데, 한개의 경고만 지정할 수 있다.
              X, 여러 개 가능
              
              C. 컴파일러의 경고 내용을 자세히 보기 위해서는 -Xlint옵션을 사용하면 된다.
              O
              
              D. 컴파일러에 의해 사용되는 애너테이션의 유지 정책은 RUNTIME이고, 실행 시에 사용 가능한 애너테이션의 정책은SOURCE 이다.
              X, 반대...
              


              Q2. 다음 코드는 @Target을 사용했을 때의 코드이다. 각각의 적용대상을 적으시오.

              대상타입
              ANNOTATION_TYPE
              CONSTRUCTOR
              FIELD
              LOCAL_VARIABLE
              METHOD
              PACKAGE
              PARAMETER
              TYPE
              TYPE_PARAMETER
              TYPE_USE
              @Target({FIELD, TYPE, TYPE_USE})
              public @interface MyAnnotation { } // MyAnnotation 정의
              
              @MyAnnotation  // 적용 대상이 ① 인 경우
              class MyClass {
                  @MyAnnotation // 적용 대상이 ② 인 경우
                  int i;
              
                  @MyAnnotation // 적용 대상이 ③ 인 경우
                  MyClass mc;
              }
              

              ①: ANNOTATION_TYPE
              ②: FIELD
              ③: CONSTRUCTOR



              《 Chap.34 : 애너테이션 타입 정의하기 ~ Chap.39 : 애너테이션의 활용 예제 》

              Q1. 다음은 애너테이션의 요소를 설명한 글이다. 빈칸에 들어갈 단어는?

              1. 애너테이션 적용시, 값을 지정하지 않으면 사용될 수 있는 (가) 지정 가능 (null 제외)
              2. 요소가 하나이고 이름이 value 일 때는 요소의 (나) 생략 가능
              3. 요소의 타입이 배열인 경우, (다)를 사용해야 함

              가 - 기본값?

              나 - 이름

              다 - 중괄호


              Q2. 다음은 애너테이션 요소의 규칙이다. 틀린 것은? (1개)

              1. 요소의 타입은 참조형, Integer, enum, 애너테이션, Class만 허용됨
              2. () 안에 매개변수를 선언할 수 없음
              3. 예외를 선언할 수 없음
              4. 요소를 타입 매개변수로 정의할 수 없음

              ??