본문 바로가기

Java/[패스트캠퍼스] 100% 환급 챌린지

패스트캠퍼스 환급챌린지 39일차 미션 (3월 10일) : 시그니처 백엔드 Path 초격차 패키지 Online. 강의 후기

https://fastcampus.co.kr/dev_online_besignature
수강 강의명

강의 내용

[1] 메모리를 통한 상속(extends)의 이해
[2] 메모리를 통한 상속(extends)의 이해(실습)

 

[1] 메모리를 통한 상속(extends)의 이해

상속은 메모리를 통해 이해해야 쉽게 이해 가능
부모가 갖는 기억 공간 뿐만 아니라 동작을 자식(하위 클래스)에게 상속하면
자식(하위 클래스)이 부모가 갖는 상태, 행위 정보를 사용할 수 있다.
 

UML에서 표현하는 상속

부모와 자식이 어떻게 메모리에 만들어질까?
사원이 확장되어 일반 사원이 만들어진다.
사원이 확장되어 관리 사원이 만들어진다.
사원이 확장되어 비서 사원이 만들어진다.
사원이 확장되어 일용직 사원이 만들어진다.

Employee(사원, 부모 클래스)  // super class : 상위 클래스, 부모 클래스(일반화, 추상화, 개념화, 포괄적)
△ extends(상속, 확장)
RempVO(일반 사원, 자식 클래스)  // sub class : 하위 클래스, 자식 클래스, 파생 클래스(구체화, 구상화, 세분화)

*파생 : 부모에 의해 가지 하나가 분리된 것
*구상화 : 마지막으로 고착화된 클래스(예 : 콘크리트 -> 굳어버려 더 이상 변형되지 않음)
*상속 : 부모가 갖는 기능을 확장시켜(재활용) 자식(하위 클래스) 여러 개를 만들어내는 방법
*□ : 객체(Object)를 최소화하여 표현
*UML(Unified Modeling Languag) 다이어그램 : 객체지향 모델링 언어(그림으로 표현하는 언어)
의사소통을 할 때 소스 코드 보다는 시각적(다이어그램)으로 표현하는 게 더 효율적이다.
설계된 다이어그램을 보고 코드로 작성하는 게 일반적이다.

 

소스 코드로 표현하는 상속

상속을 사용하면 하위 클래스가 상위 클래스를 접근하여 사용 가능하기 때문에 상위 클래스를 재활용할 수 있다.

 
접근 제어
상속 관계에서 접근 제어를 private으로 하면 자식(하위 클래스)이 부모의 상태 정보에 데이터를 넣을 수 없다.
부모의 프라이버시를 침범할 수 없기 때문에 자식이 부모의 기억 공간에 접근할 수 없음
상속 관계에서 접근 제어를 private으로 하면 상속의 의미가 퇴색되어 버린다.(의미가 없음)
자식만큼은 부모의 기억 공간에 접근할 수 있도록 허용해줘야 한다.
*protected : 상속 관계에서 하위 클래스가 상위 클래스의 접근을 허용하는 접근 권한
                          상속 관계에서 자식(하위 클래스)이 부모(상위 클래스)의 기억 공간에 접근을 허용하는 접근 권한

 
extends 키워드
왼(자식 클래스) extends 오(부모 클래스)
상속 받으려면 extends라는 키워드를 사용해야 하는데,
어떤 클래스를 상속 받을건지에 대한 부모 클래스에 대한 정보를 같이 적어줘야 함
 

상속 관계에서 객체 생성

부모 객체가 먼저 생성되어야 자식 객체가 생성된다.
"나"라는 객체가 존재하려면 "부모"라는 객체가 먼저 존재해야 함
 
생성자 메서드는 자식 객체가 만들어질 때 호출된다.
객체를 생성할 때는 상속 받는 하위 클래스의 객체를 생성하면 된다.
부모 객체를 먼저 생성해야 되기 때문에 자식 생성자 안에서 부모 생성자를 호출한다.
부모 생성자가 호출되면 메모리에 부모 객체가 먼저 생성된다.
부모 객체 먼저 메모리에 만들어지고, 그 다음에 자식이 만들어진다.

메모리에 부모와 자식이 붙어있는 구조로 만들어진다.
실제 메모리상에서 부모와 자식은 분리된 형태를 갖지만, 자식은 전체(부모 + 자식) 메모리 공간을 사용할 수 있다.
원래는 자식 클래스 범위 만큼만 접근 가능하지만, 상속으로 인해 확장되어 부모 클래스 범위까지 접근 가능하게 된다.

부모가 자기가 가지고 있는 공간을 사용하도록 상속했다면 자식은 부모의 공간을 사용할 수 있어야 함
자식 클래스를 가리키는 객체(변수)를 통해 부모의 기억 공간에 접근 가능하다.

*super() : 부모 클래스를 가리키는 포인터 역할, 상위 클래스의 생성자를 호출한다.

public class Employee {  // VO : 바구니를 설계
     protected String name;  // 이름
     protected int age;  // 나이
     protected String phone;  // 전화번호
     protected String empDate;  // 입사일
     protected String dept;  // 근무부서
     protected boolean marriage;  // 결혼여부

     public Employee() {
          super();  // new Object();
     }
}
public class RempVO extends Employee {
     public RempVO() {
          super();  // new Employee();
     }
}
RempVO vo = new RempVO();
vo.name = "홍길동";
vo.age = 33;
vo.phone = "010-1111-1111";
vo.empDate = "2010.01.01";
vo.dept = "홍보부";
vo.marriage = true;

 

[2] 메모리를 통한 상속(extends)의 이해(실습)

상속을 해줬기 때문에 자식이 부모의 공간을 사용할 수 있으므로 부모의 공간에 데이터를 넣을 수 있다.
하위 클래스가 부모가 갖는 상태 정보/행위 정보를 사용할 수 있다.
부모가 갖는 기억 공간에 자식이 데이터를 저장할 수 있다.

*상속 체이닝 : 맨 위의 객체부터 만들어서 아래로 객체가 만들어져 내려오는 형태
C, B, A
맨 위의 C라는 객체부터 메모리에 만들어지고, B, A가 만들어진다.
A가 사용 가능한 메모리의 범위 : C, B, A
B가 사용 가능한 메모리의 범위 : C, B

객체가 생성되려면 생성자 메서드가 호출되어야 함
생성자 메서드가 호출되어야 객체가 생성된다.
어떤 클래스의 생성자 안에 super()가 있다는 건 해당 클래스에 부모 클래스가 있다는 의미이다.
super()가 호출되면 부모 클래스의 객체가 생성된다.

부모 없이는 자식이 존재할 수 없기 때문에 모든 클래스는 부모가 있어야 한다.
어떤 클래스를 만들면 기본적으로 부모 클래스 하나(Object)를 상속받게 되어 있다.

*Object : 자바에서 모든 클래스의 부모(최상위 클래스)
자바에서 제공하는 클래스(자바에서 API를 만들 때 가장 처음으로 만든 API)
Object 클래스를 상속시켜 다른 클래스(API)들을 파생시켰다.
모든 클래스는 부모가 있어야하기 때문에 지정된 부모가 없는 경우 자동으로 Object가 부모가 된다(생략된 형태)
어떤 클래스를 설계하면 반드시 부모 클래스를 물려받도록 자바에서 기본적으로 설정해놓았다.
 


 

수강 화면수강 화면
수강 화면


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://bit.ly/48sS29N

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr