lab4

java2-lab4

Lab4_1~ Lab4_4 프로젝트 디렉토리 안에 모든 파일(src/*.java & bin/*.class)와 보고서 (장수제한없음)를 넣고 Lab4_학번_이름.zip 압축한 후 e-learning (http://lms.dankook.ac.kr/index.jsp)으로 제출 (Due extended by 10/15)

exception handling, file io, interface, File (e-learning에 답안)

Lab4_1 run-time exception의 상황을 모두 잡아주는 예외처리
Lab4_2  loadCSV 메소드에서는 클래스명에 따라서 해당 객체를 생성
Lab4_3는 배열을 사용해서 객체 Manager 클래스로,
생성자에서 size로 배열의 초기 크기 지정,
add 메소드로 배열에 객체를 추가하면 count 증가. 
getAll 메소드는 배열을 반환.
print 메소드에서는 null출력하지말고 count를 이용해서 데이터가 있는것 만큼만 출력.
remove 메소드는 해당 index의 것만 null되는 것이 아니라, 해당 데이터는 지워지고 그만큼 다음 데이터가 앞으로 당겨지도록.
Lab4_4는 printAllImagesInDirectory에서 디렉토리를 지정, 그 디렉토리 안에 있는 (서브디렉토리까지) 모든 image 파일을 찾아서 print (만약 image 파일이 아닌경우 exception handling)

Design Patterns

Design Patterns in Java
https://www.tutorialspoint.com/design_pattern/index.htm

생성
Abstract Factory 부품을 조립해서 제품 생성
Factory Method 하위클래스에서 인스턴스 생성
Builder 조립해서 제품 생성
Prototype 인스턴스를 복제해서 사용
Singleton 하나의 인스턴스만 생성해서 공유사용

구조
Adapter 기존 객체를 원하는 형식으로 바꾸어(adapt) 사용
Bridge 기능 계층과 구현 계층 분리
Composite 그릇과 내용물을 동일시
Decorator 장식과 내용물을 동일시
Facade 단순한 창구 역할
Flyweight 동일한 것 공유하여 사용
Proxy 필요해지면 만드는 구조

행동
Chain of Responsibility 책임을 넘기는 구조
Command 명령을 클래스로 표현하는 구조
Iterator 어떤 목록을 순차적으로 처리하는 구조
Mediator 중개자를 통해 처리하는 구조
Observer 상태 변화를 통보 (이벤트 핸들링 시스템 구현에 사용)
Strategy 동적으로 알고리즘을 교체할 수 있는 구조
Template Method 상위클래스(template)에서 기본적인 알고리즘을 구성한 상태에서, 구체적인 설계를 하위클래스에 위임
Visitor 데이터 구조를 돌아다니며 처리하는 구조 (구조를 수정하지 않고 새로운 동작을 기존 객체 구조에 추가 가능)

 

Model-View-Controller (MVC)
https://www.oracle.com/technetwork/articles/javase/mvc-136693.html
https://zetawiki.com/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC_MVC

Data Access Object (DAO)
https://www.oracle.com/technetwork/java/dataaccessobject-138824.html
https://zetawiki.com/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A0%91%EA%B7%BC%EA%B0%9D%EC%B2%B4_DAO

Data Transfer Object (DTO)
https://www.oracle.com/technetwork/java/transferobject-139757.html
https://zetawiki.com/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A0%84%EB%8B%AC%EA%B0%9D%EC%B2%B4_DTO

Exceptions

ArrayIndexOutOfBoundsException 배열의 범위를 벗어난 접근할 때 발생

ArithmeticException 산술 연산 오류 에 의해 발생 (예를 들어, 0으로 정수를 나누는 경우)

NullPointerException null 객체를 사용하려고 시도할 때 발생

ClassCastException 변환할 수 없는 클래스로 객체 변환을 시도할 때 발생

NumberFormatException String을 숫자(number)로 변환할 수 없을 때 발생 (예를 들어, “1.23”을 Integer 변환을 시도할 때)

IllegalArgumentException 메소드 인자(argument) 유형을 잘못 사용할 경우

InputMismatchException (Scanner 클래스) 잘못된 입력일 때 발생

IOException 입출력(IO) 오류에 의해 발생

FileNotFoundException 지정된 경로에서 파일을 찾지 못할 때 발생

Abstract class vs interface

abstract class vs interface

(Image from http://alecture.blogspot.com/2011/05/abstract-class-interface.html)

abstract class (일반변수+일반메소드+추상메소드 형태) – 추상클래스는 공통부분(abstract)을 상속해서 구현하게 함.
interface (상수+추상메소드 형태) – 기능(abstract) 구현(implements)을 강제함으로써, 구현한 객체들에서 동일한 동작을 보장할 수 있음.

An abstract class is generally used as a building basis for similar classes. Implementation that is common for the classes can be in the abstract class.
An interface is generally used to specify an ability for classes, where the classes doesn’t have to be very similar.

https://beginnersbook.com/2013/05/abstract-class-vs-interface-in-java/
https://dzone.com/articles/java-interface-vs-abstract-class
https://www.guru99.com/interface-vs-abstract-class-java.html