분류 전체보기 279

[뉴렉처] 이벤트 메소드 구현하기(팩토리 메소드 구현하기 이어서)

https://www.youtube.com/watch?v=WEm6Bhc3vOc&list=PLq8wAnVUcTFX4E2NplMvJfqlcgAeF_BxK&index=28 동영상 강의 전체를 다시 오버라이드 하기에는 오버니까 아래처럼 해야함 추상메소드를 통해 새로 추가되는 부분만 자식에게 오버라이드 맡기고 부모는 기존에 가지고 있는 국어, 영어, 수학 부분만 책임지게함 package Exam_1.추상화; import java.util.Scanner; public abstract class ExamConsole { private ExamList list = new ExamList(); void input() { //앞에 private 있으면 호출 안됨 다른 클래스에서 못씀 Scanner scan = new Sc..

[뉴렉처] 팩토리 메소드 구현하기

지금 현재 Exam이 추상클래스로 되어있기 때문에 ExamConsole에서 Exam을 객체로 생성하여 활용하는곳에서 오류가 발생하고 있다. 추상메소드를 가지려면 그 울타리인 클래스도 추상클래스로 변경해야함 package Exam_1.추상화; import java.util.Scanner; public abstract class ExamConsole { private ExamList list = new ExamList(); void input() { //앞에 private 있으면 호출 안됨 다른 클래스에서 못씀 Scanner scan = new Scanner(System.in); System.out.println("--------------------"); System.out.println("성적입력"); ..

[뉴렉처] 팩토리 메소드(Factory Method)

(input에서 성적을 입력받아야함) Exam이 추상메소드가 되었기 때문에 Exam을 객체 생성해서 사용하던 ExamConsole은 Exam을 객체 생성할 수 없어지기때문에 문제가 발생한다. ExamConsole 클래스도 추상클래스로 변경하고 안에는 Exam의 자료를 활용할 수 있도록 makeExam 추상클래스를 protected로 만든다. NewlecExamConsole이 ExamConsole 추상클래스를 상속받고 그안의 추상메소드 makeExam()을 오버라이드 한다. input 메소드안의 오류를 해결함 메인프로그램은 ExamConsole이 아닌 NewlecExamConsole을 통해서 실행 NewlecExamConsole 클래스처럼 메소드를 생성하는 구조를 팩토리메소드라고 한다.

[뉴렉처] 추상 메소드(Abstract Method) 구현하기

공통되는 기능인 move()는 공통적으로 바로 사용 가능하지만 paint()의 경우엔 각각의 개체에서 재정의한 후 사용 가능하다. 추상메소드(뼈대)를 부모클래스에 올려놓고 자식클래스에서 오버라이드함(재정의) total(), avg()는 구현으로는 자체가(안의 코드가) 공통은 아니지만 서비스(자료형)는 공통이다. 추상메소드를 선언하면 추상메소드를 가져다 쓰는 자식들은 반드시 추상메소드를 구현해야한다. 지금 모두 같은 패키지이름이지만 프로젝트는 다름 package Exam_1.추상화; import java.util.Scanner; public abstract class Exam_1 { public static void main(String[] args) { ExamConsole list = new ExamC..

[뉴렉처] 추상 클래스 만들기 추상화

https://www.youtube.com/watch?v=Y0okhvvl29U&list=PLq8wAnVUcTFX4E2NplMvJfqlcgAeF_BxK&index=23 뉴렉처님 동영상 강의 abstract한 클래스는 객체화 할 수 없도록 설정이 되어있다. 기존에 만들었던 Exam_UI.jar에 Exam클래스에 abstract라고 코드에 변화를 줘야하는데 Exam_UI.jar이 파일은 따로 재수정이 안되고 삭제한 후에 다시 재사용하기 위한 과정을 거쳐야 한다. 이렇게하면 과정이 복잡하고 번거로울 수 있다. (바꿀때 마다 배포하고 포함시키고 하는 과정을 반복해야함) 여기서 프로젝트를 선택하면 마치 라이브러리를 배포한것처럼 참고해서 사용할 수 있다. test에 있던 모든 패키지들을 쓸 수 있게됨 추상화 설정 a..

[뉴렉처] 코드 집중화와 추상화

처음에 코드를 만들때 복사 붙여넣기 한 후에 방정리를 하듯 코드 정제를 해야함, 집중화, 구조화, 캡슐화 -> 고도화, 리팩토링이라고도함 세단이든 스포츠카든 승합차든 다 공동된 자동차로써의 기능을 한다. 자동차의 기능을 따로 모아두고 상속시킴 Shape이라는 추상클래스가 있으면 Shape의 배열에 자식객체들을 담아서 자식객체들의 메소드나 변수를 사용할 수 있다. 예를들어 성적관리 프로그램을 여러곳에 판매 할때 하나씩 Exam을 가지고 만들다보면 Exam의 기능들이 공통분모화 됨혹은 솔루션 자체를 판매할때 필요하다. 구매한쪽에서 Exam을 상속받아 필요한 만큼 수정하여 사용할 수 있게끔 하려면 Exam을 추상클래스로 바꿔줘야함

[뉴렉처] 메소드 동적 바인딩

https://www.youtube.com/watch?v=jlA2aYDktiQ&list=PLq8wAnVUcTFX4E2NplMvJfqlcgAeF_BxK&index=21 메소드를 오버라이드하면 우선순위가 높아지는구나 까지 알았을때 왜 우선순위가 높아지는가에 대한 강의 였는데 좀 어렵다.. 다음과 같은 상황일때 출력은 파라미터로 받는 객체가 어떤것이냐에 따라 다름, 들어갈 수 있는 객체는 두가지이다. Exam 일경우 Exam total이 들어오고 NewlecExam일 경우 NewlecExam total이 들어옴 실행중에 함수의 위치가 변경되는걸 동적바인딩이라고함

[뉴렉처] 메소드의 관계 연습하기

https://www.youtube.com/watch?v=vlkOwD828yg&list=PLq8wAnVUcTFX4E2NplMvJfqlcgAeF_BxK&index=19 이해가 안될 경우 다시 참고 A라고 정의되어 있는 범주까지만 볼 수 있는 상태에서 a.f6();이 에러발생함 사용하려면 형변환을 통해 사용할 수 있음 ((B)a).f6(); 이렇게하면 f6(), f7()까지 메소드가 확인이됨 (형식변환을 먼저 하기위해 ()를 한겹 더 씌움, 안하면 . 이 먼저 계산 된다. ) a.f2()는 B클래스에서 f1~f5까지 보이게 되고 그 중 f2가 없기 때문의 부모 클래스의 메소드인 f2가 호출된다. f2는 f3을 호출하게 되고 여기서 f3은 오버라이한 메소드가 우선시 되기 때문에 B클래스의 f3이 호출된다. b..

[뉴렉처] 참조형식과 호출되는 메소드의 관계

Exam exam = new NewlecExam(); Exam을 먼저참조? 해야 그리고나서 NewlecExam(); 참조가능 위에 1번은 당연히 4가 출력되고 아래 2번은 앞의 참조형식인 Exam의 total을 먼저 호출하는것이 아니라 오버라이드한 NewlecExam의 total을 먼저 호출한다. 참조형식이 무엇이냐에 따라 호출할 수 있는 함수가 결정이 되고 오버라이드한 메소드가 있으면 그 메소드가 먼저 호출된다. 위의 경우 1번은 4가 출력되고 2번은 오류가 발생된다. 참조형식이 가지고 있는 메소드에 한해서 생성된 객체의 메소드를 호출할 수 있음 (Exam의 total을 먼저 참고하고 NewlecExam의 total이 호출되는데 Exam의 total이 아예 없기 때문이다. 가지고 있지 않으며 아예 호출..

[뉴렉처] 자식 클래스의 객체 초기화(부모클래스의 객체 포함)

import Exam_1.UI코드분리하기.Exam; public class Program { public static void main(String[] args) { NewlecExam exam = new NewlecExam(1, 1, 1, 1);//생성시 직접입력 가능해짐 //exam.setMath(10); //생성자가 있어서 필요 따로 입력할 필요 없게됨 //exam.setKor(10); //exam.setEng(10); //exam.setCom(10); System.out.println(exam.total()); System.out.println(exam.avg()); } } import Exam_1.UI코드분리하기.Exam; public class NewlecExam extends Exam { p..