3/30 수업정리
데이터 구조화
절차의 구조화
구조화된 프로그래밍에서의 캡슐화
데이터+함수 :
캡슐 -> 시각의 전환 -> 객체지향->실세계를 반영하는 프로그래밍
->인간의 표현방법을 그대로 코드로 이어질 수 있게하는
적기가 움직, 적기의 발사
캡슐화 : 역할자(기능)
로또/콘솔
Lotto[gen()/..] / LottoConsole[print()]
제품 has a 부품 : 관계
Summary
- A has a B 상속관계 : A제품을 만들때 B를 부품으로 사용
- A is a B 상속관계 : A제품을 만들때 B를 틀로 사용 (extends , override)
- Override : 부모의 함수명을 동일하게 써야한다. 우선순위가 높아진다.부모것을 확장해쓴다.
- 상속 : 자식객체생성시 부모객체생성도 자동호출된다 (super(); )
- 부모를 가지는 클래스는 두개의 객체를 생성한다.
- 인스턴스함수: 객체를 넘겨받는 함수, 객체함수, 객체를 통해 호출, ex:생성자();
- print메소드는 콘솔출력을 위한것→Lotto클래스안에 포함할 수있지만 콘솔출력용이 되버린다.→재사용률을높이고,결합도를 낮추기 위해 분리시킴.
Frame frame = new Frame();
Is A 상속관계
Is a : 기존 엔진을 틀로서 가져다가 고쳐서 이용. (ex,타이어가 타이어를 이용)
public class Lotto2 extends Lotto
Lotto라는 프레임으로 부터 물려받는 기능을 고쳐서 사용하다.
Lotto2에는 아무것도없었지만, lotto를 extends하면 (import 하기)
Lotto2의 객체를 통해 Lotto안에있는 gen()을 호출할 수 있다.
밖에서 봤을땐(main함수입장) Lotto2가 구현한 것 처럼 보인다.
Lotto와 Lotto2를 같은것으로 인식한다.
Override
기존의 Lotto안에있는 gen()를 고쳐쓰다.
자식클래스의 메소드가 우선순위가 높아진다.
캡슐화
Exam이 단순히 데이터를 구조화하고있을뿐 아니라, 총점과 평균을 구현하는 서비스까지 포함한다.
시험성적관리하는 역할을 부여
NewExam클래스를 만들고 Exam클래스를 extends 한다.
Exam클래스 / NewExam클래스
부모 / 자식
상위/하위
기반/파생
자바에서는 부모객체를 super라고 부른다.
this 는 자식객체를 호칭.
NewExam클래스에 total()이 없는데, total이 출력되는 이유 ?
Exam()생성자가 자동호출되었기때문에 합계가 30이 나온다.
Exam클래스의 생성자안의 kor,eng,math는 this의 kor, this의 eng, this의 math가 초기화 된것이다. this생략.
부모를 가지는 클래스는 두개의 객체를 생성한다.
New NewExam()을 호출하는 순간 Super()생성자가 자동으로 호출된다.
super()생성자가 적용이 안되었다면 Exam()생성자에서 초기화된부분이 반영이 되지않았어야한다.
total :30출력된것은 자식클래스 객체생성과 동시에 부모클래스객체 생성도 자동반영되었기 때문이다.
- super();가 생략되었지만, 명시해줘도된다. 명시할때 무조건 가장먼저 호출되어야한다.
- 생성자는 한번만호출 되고, 제일먼저 호출되어야하기 때문이다.
NewExam클래스에서 total()를 오버라이딩한다면 ?
NewExam클래스에서 ctrl + space를 누르면 오버라이딩할 수 있는 부모의 함수들이 뜬다.
total()선택. return 값에 부모의 total() + com; 더해준다.
오버라이딩한 total()에서 super를 지운다면 ?
super를 지우면, this가붙게된다.현재 객체가 가지고있는 total()를 찾게된다.
자신이 자신을 부르게된다. 내가 부모를 부르기위해 super를 써야한다.
내가 나를호출한다.
생성자도 인자값을 받을 수 있다.
인자를 갖고있지않다면 기본값이된다.
인자를 통해서 내가 원하는 값으로 바꿀수도있다.
'2021 Newlecture > JAVA' 카테고리의 다른 글
Constructor Dependency Injection 생성자 종속성 주입 / abstract / protected (0) | 2021.04.06 |
---|---|
추상화 / abstract class/ abstract method (0) | 2021.04.05 |
Is a , has a 상속 정리 / 함수 호출 관계/ 동적바인딩 / 부모형식의 참조변수 (0) | 2021.04.02 |
오버로드/매개변수 있는 생성자/super(int value)/ Frame클래스 상속 후 오버라이딩 (0) | 2021.04.01 |
객체지향에서 절차를 나누고 정리하는 방법/ has A 상속 (0) | 2021.03.30 |
프로그램을 만드는 순서 /개체와 서비스함수 / 객체지향에서의 캡슐화 (0) | 2021.03.29 |
객체지향 프로그래밍 / this / static메소드 / 인스턴스메소드/ 생성자 / Getter&Setter (0) | 2021.03.27 |
캡슐화 / 접근지시자 / Getter 함수 (0) | 2021.03.25 |