자바/자바 복습 되새김질

자바 복습 Test 공부(정보은닉, 오버라이딩, 컬렉션프레임워크, 상한제한, 하한제한)

Tomitom 2022. 11. 21. 16:36
반응형


1. 정보 은닉, 캡슐화, 상속, 다형성  (정의만) 

 

- 정보은닉 : 

접근 제어자는 정보 은닉을 위한 키워드

public : 변수에 대한 모든 접근 가능

private : 클래스 내부에서만 사용되고, 외부에서 접근 불가 

protected : 상속받은 하위 클래스에게만 접근을 허용

default : 같은  패키지, 같은 클래스 내에서 참조할 수 있는 기본접근 제어자

 

- 캡슐화 :

데이터와 알고리즘을 하나로 묶음.  캡슐화의 가장 큰 장점은 저보 은닉. 

관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 접근하지 못하도록 은닉. 

외부에서 특정 객체의 데이터나 함수의 직접적인 접근을 막아서 변경을 못하도록 한다. 

유지보수나 확장 시 오류의 범위를 최소화 할 수 있다. 

데이터가 변경되어도 다른 객체에게 영향을 주지 않는다. 

접근을 위해 setter, getter 로 사용.

입력할 때에는 set, 가져올 때는 get을 사용해서 가져온다. 

 

- 다형성 :

부모 타입의 참조 변수로 자식 타입의 인스턴스를 참조할 수 있는 성질을 다형성이라고 함. 

다형성 적용 시 접근 범위?

부모 타입이 자식의 인스턴스를 참조하면, 부모타입이 가지고 있는 자원에 대해서만 접근이 가능하다. 

(참조 타입에 따라 접근 범위가 제한적으로 결정된다.) 

부모 타입이 자식 인스턴스의 메소드를 호출하는 유일한 방법은 자식이 부모의 메소드를 오버라이딩한 경우에만 가능하다. 

 


2. 메소드 오버로딩과 오버라이딩의 차이  (실제 코드를 보고 확인하기) 

 

메소드 오버로딩 : 

반환형과 이름이 같은데 매개변수와 정의가 다른 여러개의 함수를 만드는 것 

메소드 오버로딩은 오로지 매개변수에 대한 변화만이 가능하다. 

class MyHome {
   void mySimpleRoom(int n) {...}
   void mySimpleRoom(int n1, int n2) {...}
   void mySimpleRoom(double d1, double d2) {...}
}

 

메소드 오버라이딩 : 

부모 클래스의 반환형 메소드와 매개변수까지 같은 상태에서 중괄호만 다시 정리하는 것. 

메소드의 동작만을 재정의하는 것으로, 메소드의 선언부는 기존 메소드와 같아야 함. 상속받은 부모 클래스의 메소드를 재정의하여 사용하는 것을 의미함. 

class Cake {
   public void yummy() {
      System.out.println("Yummy Cake");
   }
}

class Cheese Cake extends Cake {
   public void yummy() {
      System.out.println("Yummy Cheese Cake");   // 메소드 오버라이딩 
   }
}


3. 컬렉션 프레임워크 종류 (각각의 차이) 

데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해놓은 것 

제네릭 기반으로 되어 있음. (클래스나 인터페이스로 참조할 수 있는 데이터만 수집)

기본 자료형은 수집 안 되고, 인스턴스형만 가능. 

 

 

 


- Set<E> :

     데이터의 저장 순서를 유지하지 않고 보관한다. 
     동일 데이터의 저장을 허용하지 않는다. (중복 없음)

 

- List<E> :

     데이터의 저장 순서를 유지하여 보관한다. 
     동일 데이터의 저장이 가능하다.

 

- Stack :

     데이터의 저장 순서를 유지하여 보관한다. 
      동일 데이터의 저장이 가능하다. 
      단, 먼저 저장된 데이터일수록 마지막에 참조된다는 특성이 있다. (LIFO)

 

-Queue :

     데이터의 저장 순서를 유지하여 보관한다. 
     동일 데이터의 저장이 가능하다/
     단, 먼저 저장된 데이터일수록 처음에 참조된다는 특성이 있다. (FIFO)

 

- Map<K,V> :

     파이썬 딕셔너리와 유사하다. 
     하나의 데이터는 key와 value로 구성되어 있다. 
     key는 데이터의 식별자 역할을, value 는 실제 사용할 데이터 역할을 한다. 
     데이터의 저장 순서를 유지하지 않는다. 
     동일 key의 저장은 불가능하나, 동일 value의 저장은 가능하다.


4. 제네릭, 와일드 카드에서 어려웠던 부분 (상한 제한, 하한 제한에 대한 예제 작성)

 

제네릭 클래스의 타입 인자 제한

class Box<T extends Number> {...}

-> 인스턴스 생성시 타입 인자로는 Number 또는 이를 상속하는 클래스만이 올 수 있으므로 

Number 와 그 자식들만 올 수 있다. (제네릭 타입인자의 상한제한) 

 

public static void peekBox(Box<? extends Number> box) {
   System.out.println(box);
}


box는 Box<T> 인스턴스의 참조 값을 전달받는 매개변수이다.
  → 단 전달되는 인스턴스의 T는 Number 또는 이를 상속하는 하위 클래스이어야 함

public static void peekBox(Box<? super Integer> box) {
   System.out.println(box);
}


box는 Box<T> 인스턴스의 참조 값을 전달받는 매개변수이다.
 → 단 전달되는 인스턴스의 T는 Integer 또는 Integer가 상속하는 클래스이어야 함
   즉 위 메소드의 인자로 전달 가능한 인스턴스는 Box<Integer>, Box<Number>, Box<Object>으로 제한됨



반응형