[스터디-자바] 상속과 포함

jh5959·2025년 4월 26일
0

스터디를 합시다

목록 보기
3/5

두번째 발표하는 날..!!

강의 날짜:4/18(금)
두번째는 덜 떨릴 줄 알았는데 전혀 아니였고 진짜로 도망가고 싶었다


주제: 상속과 포함 비교하며 이해하기

학습목표

  • 상속과 포함의 정의
  • 상속과 포함의 특징
  • 상속과 포함의 차이점

상속의 정의

  • 기존의 클래스가 확장해서 새로운 클래스 작성

상속을 비유를 통해 이해하기

  • '나'가 집에서 간장계란밥을 만들다 보니 간장이 없음
  • 간장을 새로 구입하기는 뭔가 아까움
  • 윗집 부모님 집에 가서 간장을 가져옴
  • 가져온 간장을 다양하게 활용해서 간계밥을 만듦
  • 부모님은 내가 간장가져간걸 모름
  • 부모님 물건 = 내꺼
  • 그래서 나는 부모님보다 짐이 많음 = 자손의 멤버개수는 조상보다 많거나 같다
  • is a관계 나 is a 부모님

상속을 어떻게 사용하는가

class Animal{
	void 울음소리(){};
}
class Dog extends Animal{
	void 울음소리(){멍멍}; // 오버라이딩
	void 공물어오기(){}
}
class SmallDog extends Dog{
	void 울음소리(){낑낑};//오버라이딩
	void 공물어오기(){} //오버라이딩
	void 이갈이(){};
}

상속의 특징과 장점?

  • 코드 재사용성(간장가져와서 씀)
  • 유지보수성이 좋다
    - 상속받은 기능이 한 곳(부모클래스)에 있기 때문에 수정을 한군데만 해도 전체 반영됨
    - 그러나 계층구조가 깊어지면 복잡함
  • 계층적 구조 설계 가능
    - Animal → Dog → SmallDog : 공통기능 위로 올리고 세부 기능 아래로 분리해서 재사용성과 설계 도와줌
    - 그러나 구조가 깊어지면 바꾸기 어렵고 유연성 떨어짐
  • 단일 상속

포함의 정의

  • 클래스 안에 다른 클래스 타입의 iv를 선언하는 것
  • 작은 단위의 클래스를 만들고 이들은 조합해서 클래스 만든다

포함을 비유를 통해 이해하기

  • 간장계란밥을 만들기 위해 냉장고를 봄
  • 간장, 계란, 밥이 있어서 냉장고에서 가져옴
  • 가져온 재료로 간계밥 완성
  • 간계밥말고 계란볶음밥도 쌉가능함
  • has a 관계 간계반은 간장,계란,밥을 가지고 있다

포함을 어떻게 사용하는가

class Engine{
	void 시동걸기();
}
class Car{
	Engine e = new Engine(); //Engine 객체를 Car가 포함

	void startCer(){
		engine.시동걸기(); //포함된 엔진의 기능을 사용
	}
}

포함의 특징과 장점

  • 상속은 강한 결합인데 포함은 여러 객체 조립하듯 결합 가능 -> 수정교체유연(다형성 활용 가능)
  • 책임분리
    - 클래스가 자기 역할만 하면 됨, Car는 운전하는 책임 Engine은 시동거는 책임

상속과 포함의 차이점 

  • 상속은 is a 관계, 포함은 has a 관계
  • 상속은 계층구조 바꾸기 어려움, 포함은 더 유연하다
  • 상속은 단일상속만 가능, 포함 여러개 사용 가능

상속을 여러개 사용하고 싶으면?

  • 상속은 중요한거 하나만하고 나머지는 포함을 사용하면 된다

상속보다 포함을 더 많이 사용한다

상속은 언제 포함은 언제 사용하면 좋을까

  • 상속
    - A is a B 관계일 때(ex. Dog is Animal)
    - 공통 기능을 재사용하고 싶을 때
    - 변경 가능성 적고, 계층적 설계가 유리할 때
  • 포함
    - 여러 기능(객체)을 조합해야 할때
    - 객체 교체나 확장이 예상될 때(유지보수, 유연성 중요)
    - 강한 결합을 피하고 싶을 때(느슨한 연결 지향)

다음에 준비할 것

  • 이번 발표는 준비가 부족했던거 같다
  • 내 마음에 너무 들지 않은 발표였음
  • 개념과 예시코드 설명만 해도 평타칠 듯 다음에는 그렇게 해야겠다

0개의 댓글