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();

Frame 클래스를 이용해 타이틀바와 사이즈조절이되는 윈도우를 만들수 있다.

Is A 상속관계

Is a : 기존 엔진을 틀로서 가져다가 고쳐서 이용. (ex,타이어가 타이어를 이용)

public class Lotto2 extends Lotto

Lotto라는 프레임으로 부터 물려받는 기능을 고쳐서 사용하다.

Lotto2에는 아무것도없었지만, lotto를 extends하면 (import 하기)

Lotto2의 객체를 통해 Lotto안에있는 gen()을 호출할 수 있다.

 

lotto안에있는 gen()호출
Lotto안의 gen실행후 출력

밖에서 봤을땐(main함수입장) Lotto2가 구현한 것 처럼 보인다. 

Lotto와 Lotto2를 같은것으로 인식한다.

Override

기존의 Lotto안에있는 gen()를 고쳐쓰다.

자식클래스의 메소드가 우선순위가 높아진다.

Lotto2가 gen()을 오버라이딩후 바뀐내역으로 출력 


캡슐화

Exam이 단순히 데이터를 구조화하고있을뿐 아니라, 총점과 평균을 구현하는 서비스까지 포함한다.

시험성적관리하는 역할을 부여

NewExam클래스를 만들고 Exam클래스를 extends 한다. 

Exam을 상속받을 NewExam클래스만들기

Exam클래스 / NewExam클래스

부모 / 자식

상위/하위

기반/파생

자바에서는 부모객체를 super라고 부른다.

this 는 자식객체를 호칭.

NewExam클래스에 total()이 없는데, total이 출력되는 이유 ? 

Exam()생성자가 자동호출되었기때문에 합계가 30이 나온다.

NewExam클래스는 com을 초기화하는 생성자만 갖고있다.
Exam()의 생성자를 자동으로 호출했기때문에 가능한것

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()에 com 더해줬다.

 


오버라이딩한 total()에서  super를 지운다면 ?

super생략불가

super를 지우면, this가붙게된다.현재 객체가 가지고있는 total()를 찾게된다.

자신이 자신을 부르게된다. 내가 부모를 부르기위해 super를 써야한다.

 

super를 지우고 실행했을경우

내가 나를호출한다.


생성자도 인자값을 받을 수 있다.

인자를 갖고있지않다면 기본값이된다.

인자를 통해서 내가 원하는 값으로 바꿀수도있다.

+ Recent posts