DAY_015[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 10월 18일
0

국비과정

목록 보기
16/99

 🌞 Day 015 

  • 추상클래스, 인터페이스, 컬렉션 클래스...



 🦩 Abstract  

 🦜 추상클래스, 추상메서드 

  • 추상클래스
    : 상속을 통한 다형성 (부모클래스를 상속받아 여러 형태의 "자식클래스의 객체 생성 & 활용 & 메서드 오버라이딩 & type casting)의 구현에 강제성을 부여하기 위한 클래스

  • 상속의 문제점 ➡ 강제성의 부재

  • 상속을 통해 다형성(부모클래스를 상속받아 여러 형태의 자식 클래스를 생성하고 활용함)을 구현하고자 하여도, 하위 클래스에서 메소드 오버라이딩을 구현하지 않으면 다형성을 완벽히 구현할 수 없다.

  • 이 때, 오버라이딩을 구형하지 않는 것이 문법상 문제가 없다는 점을 "강제성의 부재"라고 한다


 🐤 추상클래스 작성방법 

  • 클래스 생성구문 앞에 abstract 키워드를 붙여서 생성
    접근지정자 abstract 리턴값의타입 메소드명(매개변수);

  • 추상클래스 == 추상메서드를 포함한 클래스
    : 추상 메서드를 하나 이상 포함하면, 추상클래스라고 부른다.

  • 추상메서드
    : 메소드 원형만 존재하고 실재 내용은 없는 메서드
    : 메소드 정의만 있고, 메소드의 body(몸체)구현은 없다.

  • 추상클래스는 일반 클래스와 동일하게 일반 멤버변수 일반메서드, 생성자 등을 포함할 수 있다.
    단, 추상 메소드를 포함할 수 있는 특징이 추가된 클래스

  • 추상클래스는 상속을 통한 다형성 구현을 위해 생성한다.

  • 추상클래스를 상속받은 자식클래스는 반드시 물려받은 추상메서드를 오버라이드 해야 에러가 발생하지 않는다
    ➡ 오버라이딩에 강제성 부여

  • 추상클래스는 상속전용으로 만들어졌기때문에 단독으로 객체 생성이 불가능하다.

  • 객체는 만들지 못하지만 참조변수는 생성이 가능하다.
    부모 참조변수에 자식 인스턴스를 담을 수도 있다.


 🐤 추상클래스 예시 


 🐤 추상클래스 문제점 

  • 추상 메서드 구현의 강제성이 단점이 될 수 있다.

  • 추상 메서드의 개수가 많으면 상속에 부담을 주게 된다.

  • 자식 클래스에서 사용하지 않을 추상메서드라도, 객체 생성을 위해 반드시 구현(overriding)해야 하는 문제점이 있다.

  • 해결법

    • (자주 사용할 예정인 추상메서드라면)
      모든 추상메서드가 구현(오버라이딩)된 Adapter클래스를 생성

    • 그 Adapter 클래스를 상속받아 사용

    • 필요없는 메서드를 강제로 구현(오버라이드)하지 않고 필요한 것만 구현하여 사용할 수 있다.

  • 어댑터 클래스를 상속받은 클래스도 추상클래스의 자식(손자)클래스가 된다.

  • 할아버지 손자 간 다형성을 구현하여 물려주고 오버라이딩된 메서드를 할아버지 레퍼런스가 사용할 수 있다.



 🦩 Interface  

 🦜 다중 상속을 위해 만들어진 interface 

  1. 인터페이스도 클래스이다. 다만, 제약이 있는 클래스

  2. 인터페이스는 멤버필드로 public static final 멤버만 가질 수 있다.

  3. 일반 멤버 면수와 일반 멤버메서드를 가질 수 없다.

  4. 인터페이스는 멤버메소드로 public abstract 메소드만 가질 수 있다.

  5. 추상클래스보다 더 상속을 위해서 만들어진 클래스

  6. 다중 상속이 가능

  • 자바 언어에서 제공하는 상속 기능은 단일 상속만을 지원한다.
    하나의 클래스는 하나의 부모클래스를 가질 수 있다.
    (여러 개의 클래스를 상속할 수 없음)

  • 인터페이스 내에 생성 가능한 멤버들
    : 값이 초기화된 static final 변수, 추상 메서드


 🦜 인터페이스와 멤버 필드 

  • 인터페이스는 멤버필드로 public static final 멤버만 가질 수 있다.

  • 인터페이스는 멤버메소드로 public abstract 메서드만 가질 수 있다.


 🦜 implements (구현) 

  • 인터페이스를 implement 한다는 것은 부모 인터페이스에 있는 추상메서드를 자식 클래스에서 내용을 채우고, 더이상 추상메서드가 아닌 완벽한 메서드로 완성한다는 뜻이기도 하다.

  • 그러나 인터페이스들끼리의 상속은 상속 받는 곳도 인터페이스이기 때문에
    (아직 implement하기 전이기 때문에)
    구현의 implement 의미 보다는 상속 extends의 의미로 물려주는 관계가 가능하다.

  • 인터페이스끼리의 extends는 추상메서드의 override 의무가 면제된다.
    또한 인터페이스들끼리는 다중 상속(extends)이 가능하다.


 🎯 시험 문제!!! 

  • 괄호 채우기, 코드 일부 작성 문제 나올 가능성 높음!!!



 🦩 Collection  

 🐤 컬렉션 클래스 

  • 자료구조를 구현하고 있는 클래스
  • 자료구조 : 각각의 데이터들을 효율적으로 저장하고 운용하기 위한 방법론

 1. 배열 

  • 다수 개의 요소를 저장할 수 있음, 번호(첨자)에 의해 손쉬운 접근 방법을 제공
  • 크기가 고정, 데이터의 중간삽입과 중간삭제에 비효율적

 2. 리스트(List) 

  • 크기의 제약없이 데이터를 저장할 수 있음, 데이터의 삽입과 삭제에 최적
  • 검색에 취약 - (참조값(주소)을 저장하기 때문에)
    (이를 개선하기 위한 더블 링크드 리스트를 사용하기도 함)
  • 데이터 저장 시 불필요한 메모리 사용
  • 자바의 모든 자료구조 클래스(컬렉션 클래스)들은 java.util 패키지를 통해 제공받을 수 있음
  • 위와 같은 동적 배열을 구현하고 있는 클래스들
    : Vector, ArrayList(가장 많이 사용)
  • 링크드 리스트를 구현하고 있는 클래스 - LinkedList

 3. Set 타입의 저장방법을 구현하고 있는 클래스들 

  • Set 타입
    : 데이터를 저장할 때, 중복을 허용하지 않는 방법
    : 검색을 위해서 사용, 중복된 값을 제거하기 위해서 사용
  • HashSet(사용빈도 : 중), TreeSet

 4. Map 타입의 저장 방법을 구현하고 있는 클래스들 

  • Map 타입
    : 데이터를 Key와 Value의 형태로 저장하는 방법
    (검색을 위해서 사용, Key의 값은 중복을 허용하지 않음, Value의 값은 중복을 허용)
  • Hashtable, HashMap(가장 많이 사용) (사용빈도 : 상)

 5. Vector, ArrayList 클래스 

  • 두 개의 클래스는 동일한 기능을 제공
  • 쓰레드 동기화의 지원여부 크기의 제약없이 데이터를 저장
    (동적으로 크기를 확장)
  • 배열과 같이 인덱스를 기반으로 데이터를 접근
  • 데이터의 중복을 허용
  • 데이터의 입력 순서를 유지


 🦜 컬렉션 클래스 저장 방식 

  • 모든 컬렉션 클래스들은 기본적으로 Object 타입을 저장 & 리턴 할 수 있다.

  • Object 타입을 매개변수로 사용하는 모든 컬렉션클래스들은 타입에 상관없이 저장할 수 있다.

  • 하지만, 저장된 데이터를 반환받는 과정에서 런타임에러가 발생될 수 있다.
    즉, Object ➡️ 자식클래스의 타입 : 강제형변환

 🦜 컬렉션 프레임웍에서 제네릭의 사용 

  • 보통의 컬렉션 프레임웍은 여러타입이 혼용되어 저장은 가능하지만 실제로 혼용되어 저장되는 경우는 거의 없다.

  • 다만, 컬렉션 클래스의 입력, 변환에 관련한 모든 메서드들은 Object 타입을 기반으로 하기 때문에 컬렉션에서 데이터를 인출(.get()) 시에 강제형변환을 해야 하는 불편함이 존재한다.

  • 이러한 문제점을 해결하기 위해서 JDK 1.5 이후에는 제네릭 문법을 지원


 🐤 링크드 리스트 

  • 링크 드 리스트를 구현하고 있는 클래스
  • 데이터를 참조값으로 연결하여 저장할 수 있는 클래스
  • 개수의 제약없이 저장할 수 있음
  • 데이터의 삽입과 삭제에 최적화되어 있는 클래스
  • 데이터 중복 허용
  • 데이터 입력 순서를 유지
  • 검색에 취약
  • 데이터 저장 시 참조값도 같이 저장되기 때문에 : 메모리 낭비 발생
  • 사용빈도 : 하

 🦜 Set(HashSet) 클래스 

  • 데이터의 중복을 허용하지 않고 저장하는 클래스

  • 검색을 위해서 사용되는 클래스
    (저장할 때 hash 연산의 결과로 저장하니, 검색할 때도 hash 연산 결과로 검색하여 빠른 검색이 가능)

  • hash 연산
    : 클래스 내에서 유일한 값을 얻어 낼 수 있는 고유 알고리즘연산

  • 중복된 값을 제거하면서 데이터를 저장하기 위해 사용

  • 해쉬세트에는 정렬 메서드가 없음. 따라서 링크드 리스트의 부모클래스인 List 클래스에 전해주고 리스트로 변환해서, Collection의 스태틱 메서드로 정렬한다.


 🦜 Hashtable, HashMap 클래스 

  • 데이터베이스 내부의 키 값을 검색하기 위해서 만들어진 알고리즘을 기반으로 작성된 클래스

  • 검색을 위해서 사용되는 클래스

  • Key, Value를 저장할 수 있는 클래스

  • Key 는 중복을 허용하지 않는다.

  • Value 는 중복을 허용

  • Hashtable, HashMap 클래스는 put메소드를 사용하여 데이터를 추가,
    get메소드에 Key 값을 전달하여 Value를 리턴 받는다

  • 반복문을 이용해서 Hashtable, HashMap에 Value들을 출력하려면,
    별도의 객체가 필요하다.

  • Enumeration 객체
    : Enumeration은 열거형 자료형식(인터페이스)이다.

  • .keySet() -> key값들만 모아서 리스트로 생성


 🐤 Hashtable, HashMap 요소의 추가, 수정 

  • Value값이 중복되어도 Key값이 다르면 데이터 추가

  • 동일한 Key값으로 다른 Value가 입력되는 경우 기존의 Value값이 수정된다.


 🐤 indexOf() 와 equals() 



profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글