뉴렉처 22

[뉴렉처] 일부 기능을 분리하는 인터페이스

https://www.youtube.com/watch?v=BSEdMmBXKHg&list=PLq8wAnVUcTFX4E2NplMvJfqlcgAeF_BxK&index=34 뉴렉처 동영상 강의 같은 계열의 개체를 바꿔 끼는것은 추상클래스로 변경 구조가 다른 개체를 바꿔야 한다면 인터페이스로 변경 일부 객체중에서 일부는 내가 지금 당장 결정할 수 있는 기능이 아니다라고 판단됐을때 나중에 결정이 되면 알아서 구현해 달라고 할때 인터페이스 처리함 *예제 페인트라는 메소드를 재정의(오버라이드) 함으로써 프레임이 갖고있는 영역의 일부를 내가 원하는 모양으로 그릴 수 있게됨 지금 이 프레임을 닫기 버튼을 눌러도 닫아지지 않는데 그 이유가 인터페이스와 연관이 있다. 사용자에게 이 창을 정말 닫을 것 인지 그런 기능을 구현해..

[뉴렉처] 새로운 객체로 바꾸기(문자열을 읽어서 객체로 만들기)

https://www.youtube.com/watch?v=YZzpGtpW2h0&list=PLq8wAnVUcTFX4E2NplMvJfqlcgAeF_BxK&index=34 뉴렉처 동영상 강의 패키지 안에 메모장 생성, 메모장 안에는 Exam_1.인터페이스.B 라고 입력 FileInputStream을 통해서 경로받은다음 Scanner을 통해서 입력하고 둘다 닫아준다. 예외처리는 모두 던지기로 결합을 바꿔볼 다른 클래스 생성 하여 인터페이스 X 상속 메모장 setting의 문자를 B->C로 바꾸기만 했는데 결합이 변경되었다. *정리 외부파일의 문자열 가지고 클래스파일의 정보를 얻을 수 있고 그걸 통해서 새로운 인스턴스를 만들 수 있다. 오직 new만 인스턴스를 만들 수 있는게 아니고 메소드 통해서도 인스턴스를 만..

[뉴렉처] 객체 단위로 분리/결합을 위한 인터페이스 구현하기

결정지어지지 않았거나 나중에 교체가 될 수 있는 부분을 인터페이스로 만들어서 후에 결정될 수 있게함 기업용 어플리케이션이나 유지보수가 필요 할때 인터페이스가 필요하다. 인터페이스 구현하는 4가지 상황 package Exam_1.인터페이스; public class Program { public static void main(String[] args) { A a = new A(); a.print(); } } 안에서 결합하는 일체형 결합상태 package Exam_1.인터페이스; public class A { private B b; public A() { b = new B();// private B b를 사용하기 위해 생성자로 결합 } public void print() { int total = b.total..

[뉴렉처] 추상클래스와 인터페이스의 차이

추상화 공통분모의 자료나 기능을 모아서 집중화를 할 수 있다. 그리고 자식클래스들의 관리가 쉬워진다. 인터페이스 필요한 기능을 선택해서 다수를 연결할 수 있다. 필요한 인터페이스를 가져다가 구현하여 도킹하면 사용이 가능해진다. 파일 저장기능과 분석기능을 둘다 사용할 수 있음 추상화처럼 종속된 느낌이 아님

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

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("성적입력"); ..

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

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을 추상클래스로 바꿔줘야함

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

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