Java 코드연습 49

[뉴렉처] 추상 메소드(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..

[뉴렉처] Override(우선순위가 높은) 메소드

NewlecExam에 total() 메소드가 있었으면 NewlecExam.total(); 이 실행 되었겠지만 없으면 차선책으로 Exam.total()이 실행되게됨 만약에 NewlecExam.total(); 을 정의한다면 오버라이드 메소드가 되고 우선 순위가 Exam.total()이 아닌 NewlecExam.total();가 우선순위가 된다. (오버라이드된 메소드가 우선순위가 더 높음) Ctrl + Spacebar를 누르면 아래와 같이 나옴 import Exam_1.UI코드분리하기.Exam; public class Program { public static void main(String[] args) { NewlecExam exam = new NewlecExam(); exam.setMath(10);//지금..

[뉴렉처] IS A 상속

부품이 없을때는 어쩔수 없이 조립을 해야함 - has a 상속 (캡슐화해서 jar파일 만들어서 가져다가 쓴것) 일부의 부품은 어느정도 비슷한 틀을 가져와서 커스텀하는것 - is a 상속 변경해야할 부분이 적을때 비슷한 틀을 가져와서 만드는 것이 생산성이 훨씬 높다 생산성을 높이기위한 틀을 Framework라고 한다 단점으로는 기성복 같이 유니크하지는 않다 예를들어서 설명해 주셨는데 요즘 김치를 만들때 90%는 미리준비된 야채같은 것은 구매하고 10%의 소스의 차별화로 김치를 만드는 것과 같음 기성품에 내가 원하는 부분을 추가 커스텀함 is a 상속 기존에서 컴퓨터 과목 추가 (com) 하려고함 코드 재사용, 만들어 두었던 Exam을 jar파일로 압축해서 import함(코드재사용 참고) import Exa..

[뉴렉처] 코드 재사용이란?

https://www.youtube.com/watch?v=lMgqHYSyK28&list=PLq8wAnVUcTFX4E2NplMvJfqlcgAeF_BxK&index=14 이클립스사용하면서 정말 중요한 내용인것 같다. 재사용이란? 소스를 재사용 하는것이 아닌 배포된 제품을 재사용한다 위 그림은 수작업으로 하는방법이고 따로 이클립스에서 자동으로 해주는 기능이 있음 1. 2. 3. 우클릭 할때 Navigator에서 하면 Build Path가 안보임 Package Explorer에서 해야함 Build Path -> Configure Build Path 클릭 import Exam_1.캡슐화.Exam; public class Program { public static void main(String[] args) { E..