[1교시]
기능 : 로직처리(for문, while문 등등)
데이터 수집
UI: 화면 안에 나타나는 모든 것(입출력 관련, Scanner가 필요함)
Service: 화면에 출력되는 것은 없고, 사용자에게 입력받는 것은 UI로 보냄.
Project 프로그램이 파일이라고 생각하면 됨. 중요하니 잘 이해해놓기!
[어제하던 것 계속 이어서 공부!]
main에서 UI의 객체를 생성하고 UI에서는 Service의 객체를 생성한다.
<코드>
Service
UI
일단 선생님이 주신 파일로 수업듣고.. 압축된 파일을 이클립스에서 열 때!
[import]
압축된 파일은 이클립스 밖에서 압축을 푸는 것은 의미가 없다.
압축된 파일의 경우, Select archive file을 선택해주세요.
UI : 입출력에 관련된 모든 것
Service: 기능하는 것(기능만 정의해놓은 인터페이스, 실제로 구현하는 클래스)
▶ implements Serializable
public class ProductVO implements Serializable
분산처리 혹은 파일로 전송할 때 사용한다.
모니터 밖으로 파일을 전송할 때 사용한다.
"+"는 더하기를 할 때 쓰는 연산자이기 때문에 문자열을 연결시키려는 용도로 쓰기엔 성능이 떨어진다.
[인터페이스 설계]
인터페이스와 별개로 CRUD를 제외한 다른 기능을 추가해 Service에 넣을 수도 있다.
메소드 save, load
★★★[흐름 이해하기]★★★
하드디스크에 접근 및 저장하는 작업을 제외하고 전부 메모리 안에서 일어나는 작업
사용자 UI(입출력 담당) (main이 구동)
main이 UI 객체를 생성, 실제 작업은 Service, UI는 기능을 하기 위해 기능 담당 Service 객체를 생성해서 가지고 있어야 함
class Service는 자기가 해야할 일이 Inteface에 정의가 되어있다. Interface로 기능을 설계, 정의(중요한 기능, CRUD)한 후 실제 구현은 class Service가 한다.
VO는 Service객체를 통해 기능하기 때문에 Service의 객체를 포함한다.
메모리 안에 작업한 것은 컴터가 꺼지면 저장되지 않는다. 하드디스크에 저장! 하드디스크는 메모리 밖에 존재.
저장하기 위한 파일(ex) Product.dat)을 만들 것!
하드디스크에 존재하는 파일 Product.dat를 처음 구동하면 메모리 안으로 들어오고 작업한 후에 사용자가 종료버튼을 누르면 다시 Product.dat에 저장한다. 메모리 안에서의 작업은 정말 빠르지만, 하드디스크(HDD)는 보다 느리다. 하드디스크에 자주 접근(저장 등)하면 좋지 않다. 구동할 때, 저장할 때 딱 2번만 접근하는 것이 좋다.
★UI가 Service 객체를 생성하지만 Service에서는 UI 객체를 생성할 수 없다. 서로 상호간의 생성해서는 안된다. 한쪽 방향으로만 생성해서 사용해야 한다. 그렇지 않으면 컴퓨터가 죽어버린다.
[2교시]
Service의 생성자에 load(); 하드디스크에서 데이터를 읽어오는 작업
그렇다면 마지막에 저장을 하는 동작은?
0번 종료를 선택할 때!
ArrayList를 작업할
파일은 데이터 load시 생성된다.
@SuppressWarnings("unchecked") : 캐스팅할 때 가끔 뜬는, 오류가 아니니 Warning을 체크하지 말라
[ArrayList에 데이터를 저장하는 것]
service.insert(new ProductVO(pid,
return해도 안받으면 끝. 사용하지 않을 수 있다.
서비스에 접근하는 것은 selectOne
전제 조건 다 다른 아이디를 가지고 있다.
ProductVO vo = service.selectOne(pid);
return한 값을 받는 것이 vo이다.
null이 아니면 해당 데이터를 찾았다는 것을 의미한다.
ProductVO vo = service.selectOne(pid);
데이터가 존재하면 주소값, 존재하지 않으면 null
전체 리스트에서 아이디만 꺼내오고 꺼내온 아이디가
public ProductVO selectOne(String pid)
return list.get(i)
→ return값으로 ProductVO의 값, list.get(i)가 리턴된다.
[2. 제품 조회]
selectOne(); 같은 명의 메소드가 UI와 Service에 있으니 헷갈리면 안된다.
기능이 다르다.
Service에서는 ArrayList를 뒤져서 찾아주는 기능의 selectOne
service.selectOne(pid);
앞에 service. 이 붙어있는 것을 보고 service의 selectOne인 것을 알 수 있다.
출력
주의 : 종료를 해줘야 하드디스크에 저장이 되는 것!
다시 조회해도 저장되어있는 것을 확인할 수 있다.
제품 등록, 조회의 개념이 탑재되어 있어야 한다. 그러면 수정, 삭제는 자동으로 알게 된다는 것!
[3교시]
[전체 조회]
[제품 삭제]
삭제 전, 조회해서 있는지 확인부터 해야한다.
[제품 수정]
File.IO한다는 것은 파일에 접근해
주말 연습문제 [File.IO 문제]
ProductProject와 같은 형태로!
bankAccount.dat이라는 파일로 작업 수행!
BankAccount
- 계좌번호 : 정수 3자리 설정, 동일한 정보가 있는지 중복하도록. (가능하다면 난수) 동일하면 다시 발생, 계산용도가 아니기 때문에 String accontNo;
- 이름
String name;
- 잔고
String money;
→ 계좌번호와 이름을 수정하지 않음
BankService (Interface)
- 계좌 생성
int insert(BankAccount vo);
- 계좌 번호 조회
BankAccount selectByNo(String accountNo);
- 계좌 이름 조회(이름은 중복이 있을 수 있음)
List<BankAccount> selectByName(String name);
- 입금
int deposit(BankAccount vo); // 입금 여부 1, 0, 잔고가 늘어나야 한다. 계좌번호를 알아야 알 수 있음
- 출금
int withdraw(BankAccount vo); // 출금하려는 금액이 잔고보다 많으면 0원 리턴
→ 입금, 출금이 수정하는 것!
- 계좌 삭제
int delete(BankAccount vo);
'개발자로 가는 길(국비지원과정) > 1. Java' 카테고리의 다른 글
[자바개념정리] 흐름 및 전달인자 이해하기 (0) | 2021.06.05 |
---|---|
[210517월_test] 피보나치 수열, 연산자 문제풀이 (0) | 2021.05.17 |
[210512수] 과제 score 풀이(split), ObjectInputStream / ObjectOutputStream, Serializable (0) | 2021.05.12 |
[210511화] FileIO, InputStream, OutputStream (0) | 2021.05.11 |
8주차 질문 (0) | 2021.05.10 |