다형성(3)

최지홍·2022년 1월 25일
0

매일 공부

목록 보기
9/40

추상클래스 vs 인터페이스

공통점

  • 추상클래스와 인터페이스 모두 객체 생성이 불가능
  • 추상 메서드 구현을 강제화

차이점

  • 추상클래스는 다중 상속 불가, 인터페이스는 가능(다중 상속, 다중 구현)
  • 추상클래스는 구현부를 가진 메서드 선언 가능
  • 인터페이스는 추상메서드만 가능(자바8 이상부터는 default, static 메서드 추가)
  • 추상클래스는 모든 접근제어자 가능
  • 인터페이스는 public만 가능
  • 인터페이스는 설계를 목적, 완전 추상
  • 추상클래스는 상속할 객체들의 공통점을 찾아 추상화, 상속 관계를 타고 올라갔을 때 같은 부모 클래스를 상속하며 부모 클래스가 가진 기능을 구현할 때 사용(is-a 관계)
  • 인터페이스는 다른 부모 클래스를 갖더라도 같은 기능을 가질 때 사용, 상속과 별개로 구현 객체의 같은 동작을 보장(사용설명서)
  • 추상클래스는 상속받아서 기능을 이용하고 확장시키는 데 있음
  • 인터페이스는 틀만 제공, 구현의 강제화
  • 추상클래스는 부모 클래스의 기능을 이용, 확장하기 위해 사용, 단일 상속
  • 인터페이스는 해당 인터페이스를 구현한 객체들에게 동일한 동작을 약속하기 위해 사용, 다중 상속

에러, 예외

  • 어떤 원인에 의해 오동작 or 비정상적 종료
  • 에러: 심각한 문제. 비정상적 종료를 막을 수 없음(디버깅 필요)
  • 예외: 코드로 수습 가능한 비교적 약한 것들
  • 예외 처리: 예외 발생 시 프로그램의 종료를 막고 실행 유지
  • Checked exception: 예외 처리 코드가 없으면 컴파일 안됨
  • Unchecked exception(RuntimeException의 하위): 예외 처리 코드 없어도 컴파일 됨
  • try-catch로 예외 처리
  • getMessage(): 발생된 예외에 대한 구체적 메시지 반환
  • getCause(): 원인이 되는 Throwable 객체 or null 반환
  • printStackTrace(): 예외가 발생된 메서드가 호출되기까지의 메서드 호출 스택 출력
  • 다중 예외 처리 시 순서 유의(상속 관계)
  • finally는 예외 발생 유무와 상관없이 진행
  • finally에서 자원 반납을 하려면 코드가 많음 → try-with-resource를 통해 해결(자바7 이상)

throws

  • 예외 처리 위임
  • 예외가 없어지는 것이 아니라, 해당 메서드를 호출한 곳으로 처리를 넘김
  • checked exception은 명시적으로 throws 해야 넘어가지만, unchecked exception은 throws가 없어도 자동으로 throws

사용자 정의 예외

  • Exception 상속: checked exception
  • RuntimeException 상속: unchecked exception

자료구조

  • 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장
  • 데이터 값의 모임, 데이터 간의 관계, 데이터에 적용할 수 있는 함수나 명령

배열

  • 가장 기본적인 자료구조
  • 동일한 데이터 타입만 관리 가능
  • Object를 이용하면 모든 객체 참조가 가능하나 동적 바인딩으로 가져올 때 실제 객체의 타입 확인 필요
  • 제네릭: 컴파일 타임에 저장하려는 타입 제한 → 형변환의 번거로움 제거
  • Iterable → Collection → List, Set // Map

List

  • 순서가 있는 데이터 집합
  • 중복 허용
  • 내부적으로 데이터 추가 시 새로운 배열을 복사해서 반환함
  • ArrayList도 배열의 장단점을 그대로 가져감
  • 장점
    • 간단, 사용이 쉬움
    • 접근 속도 빠름
  • 단점
    • 크기를 변경할 수 없어 추가 데이터를 위해 새로운 배열을 만들고 복사해야 함
    • 비 순차적 데이터의 추가, 삭제에 많은 시간이 걸림
  • LinkedList: 각 요소를 Node로 정의하고 Node는 다음 요소의 참조값과 데이터로 구성
  • ArrayList 삭제 시 인덱스 감소에 주의 → 역방향으로 진행하여 해결

Set

  • 순서 없이 주머니에 구슬을 넣는 형태
  • 중복 허용하지 않음 → 어떤 데이터인지 알 수 없음(순서가 없으므로)

Map

  • Key와 Value를 하나의 Entry로 묶어서 데이터 관리
    • Key: Object 형태로 데이터 중복을 허락하지 않음
    • Value: Object 형태로 데이터 중복이 허락됨

정렬

  • Collection 들만 정렬 가능
    • List 계열, SortedSet의 자식 객체, SortedMap의 자식 객체(Map 기준)
  • Collections의 sort()를 이용하여 정렬
  • Comparable, Comparator를 이용하여 정렬
  • 클래스와 관계된 정렬(Comparable 구현) vs 외부에서 정의(사용자 정의, Comparator)
profile
백엔드 개발자가 되자!

0개의 댓글