[Java] 객체지향 프로그래밍 심화

허성은·2022년 7월 19일
0

JAVA

목록 보기
3/3

👀 메서드 오버라이딩 VS 메서드 오버로딩

class Person {
	void eat() {}
}

class Student extends Person {
    void eat() {}        // 오버라이딩
    void eat(int i) {}   // 오버로딩
    
    void study() {}     
    void study(int i) {} // 오버로딩
}

메서드 오버라이딩

  • 조상으로부터 상속받은 메서드의 내용 변경
  • 접근 제어자는 조상 클래스의 메서드보다 같거나 넓어야 함
  • 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없음

메서드 오버로딩

  • 기존에 없는 새로운 메서드 추가
  • 메서드 이름이 동일하고, 매개변수의 개수나 타입이 다른 메서드

👀 메모리 영역

Method Area

  • 클래스에 대한 정보(클래스 데이터) 저장
  • 클래스 변수도 함께 생성됨

Call Stack (Execution stack)

  • 메서드의 작업에 필요한 메모리 공간 제공
  • 메서드가 작업을 마치면 할당되었던 메모리 공간이 반환되어 비워짐

Heap

  • 인스턴스가 생성되는 공간
  • 인스턴스 변수(instance variable)들이 생성되는 공간

👀 접근 제어자(access modifier)

public > protected > (default) > private

  • private : 같은 클래스 내에서만 접근 가능
  • default : 같은 패키지 내에서만 접근 가능
  • protected : 같은 패키지 내, 다른 패키지의 자손클래스에서 접근 가능
  • public : 접근 제한 없음
1. 메서드에 static과 abstract 함께 사용 불가
	- static 메서드는 몸통이 있는 메서드에서만 사용 가능하기 때문
2. 클래스에 abstract와 final 동시에 사용 불가
	- 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이며,
      abstract는 상속을 통해 완성되어야 한다는 의미가 모순됨
3. abstract 메서드의 접근 제어자로 private 불가
	- abstract 메서드는 자손클래스에서 구현해주어야 하는데,
      접근 제어자가 private이면 자손클래스에서 접근 불가하기 때문
4. 메서드에 private과 final을 같이 사용할 필요는 없음
	- 접근 제어자가 private인 메서드는 오버라이딩될 수 없음
    - 이 둘 중 하나만 사용해도 의미가 충분함

👀 List, Set, Map 차이

List

  • 순서가 있는 데이터의 집합
  • 데이터 중복 허용
  • Collection 인터페이스가 조상
    - ArrayList, LinkedList, Stack, Vector 등

Set

  • 순서가 없는 데이터의 집합
  • 데이터의 중복을 허용하지 않음
  • Collection 인터페이스가 조상
    - HashSet, TreeSet 등

Map

  • 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합
  • 순서 없음
  • 키는 중복을 허용하지 않고, 값은 중복 허용
    - HashMap, TreeMap, Hashtable, Properties 등

👀 컬렉션(Collection)과 스트림(Stream) 차이

컬렉션

  • 데이터 소스를 변경함
  • 같은 소스를 여러번 처리 가능
  • 작업을 외부 반복으로 처리

스트림

  • 데이터 소스를 변경하지 않음
  • Iterator처럼 일회용
  • 작업을 내부 반복으로 처리

👀 제네릭(Generics)

다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능

장점

  • 타입 안정성 제공
  • 타입 체크와 형변환 생략 가능으로 인한 코드의 간결화

0개의 댓글