[2일차] BeanFactory 와 다형성 사용하기 : 네이버 카페 (naver.com)
마주이야기&마주스토리 : 네이버 카페
마주스토리 카페
cafe.naver.com
test0707 package하나 만들기
패키지에 class 세개만들기
package test0707;
public class LgTV {
public LgTV(){
System.out.println("LgTV 생성자");
}
public void powerOn() {
System.out.println("LgTV 전원을 켠다.");
}
public void powerOff() {
System.out.println("LgTV 전원을 끈다.");
}
public void volumeUp() {
System.out.println("LgTV 소리를 올린다.");
}
public void volumeDown() {
System.out.println("LgTV 소리를 내린다.");
}
}
package test0707;
public class SamsungTV {
SamsungTV(){
System.out.println("삼성 TV 생성자");
}
void turnOn() {
System.out.println("삼성 TV 를 켜다.");
}
void turnOff() {
System.out.println("삼성 TV 를 끄다.");
}
void soundUp() {
System.out.println("삼성 TV 소리를 올린다.");
}
void soundDown() {
System.out.println("삼성 TV 소리를 내린다.");
}
}
package test0707;
public class MainTest {
public static void main(String[] args) {
LgTV tv= new LgTV();
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
/*SamsungTV tv= new SamsungTV();
tv.turnOn();
tv.soundUp();
tv.soundDown();
tv.turnOff();*/
}
}
메소드의 이름이나 형태를 정의를 해놓는게 인터페이스다
TV 라는 인터페이스 생성하기
package test0707;
public class LgTV implements TV{ /*implements TV 하면 soundUp,soundDown 이 생긴다
interface에 있는거는 필수로 사용해야한다 그외는 추가해서 사용가능*/
public LgTV(){
System.out.println("LgTV 생성자");
}
public void powerOn() {
System.out.println("LgTV 전원을 켠다.");
}
public void powerOff() {
System.out.println("LgTV 전원을 끈다.");
}
/*public void volumeUp() {
System.out.println("LgTV 소리를 올린다.");
}
public void volumeDown() {
System.out.println("LgTV 소리를 내린다.");
}*/
@Override
public void soundUp() {
System.out.println("LgTV 소리를 올린다.");
}
@Override
public void soundDown() {
System.out.println("LgTV 소리를 내린다.");
}
}
package test0707;
public class SamsungTV implements TV { //implements TV하면 powerOn,powerOff가 생긴다
SamsungTV(){
System.out.println("삼성 TV 생성자");
}
void turnOn() {
System.out.println("삼성 TV 를 켜다.");
}
void turnOff() {
System.out.println("삼성 TV 를 끄다.");
}
public void soundUp() {
System.out.println("삼성 TV 소리를 올린다.");
}
public void soundDown() {
System.out.println("삼성 TV 소리를 내린다.");
}
@Override
public void powerOn() {
System.out.println("삼성 TV 를 켜다.");
}
@Override
public void powerOff() {
System.out.println("삼성 TV 를 끄다.");
}
}
메인에서 인터페이스 불러오기
package test0707;
public class MainTest {
public static void main(String[] args) {
//new SamsungTV(), new LgTV() ;
TV tv= new LgTV(); // tv 의 형을 TV라고 잡아줄 수 있음. 부모의 형을 상속받을 수 있다
tv.powerOn();
tv.soundUp();
tv.soundDown();
tv.powerOff();
/*SamsungTV tv= new SamsungTV();
tv.turnOn();
tv.soundUp();
tv.soundDown();
tv.turnOff();*/
}
}
클래스 이름만 바꿔주면 된다
*디자인패턴 BeanFactory
객체를 리턴해주기 위해서 BeanFactory를 생성한다
package test0707;
public class BeanFactory {
public Object getBean(String beanName){ //Object(객체)로 리턴받는다
if(beanName.equals("s") || beanName.equals("S")) {
return new SamsungTV();
}else if(beanName.equals("l") || beanName.equals("L")) {
return new LgTV();
}
return null; //if 문 밖에서 지정되어있어서 써준것뿐
}
}
메인에서 BeanFactory 불러오기
package test0707;
public class MainTest {
public static void main(String[] args) {
//BeanFactory: new SamsungTV(), new LgTV()를 선택할 수 있는 객체를 생성한것
BeanFactory factory = new BeanFactory();
TV tv= (TV) factory.getBean(args[0]); //메인의 값을 받음 args
//factory 의 형은 object 인데 TV로 강제 형변환 시킨 것이다
//TV tv= new SamsungTV();
tv.powerOn();
tv.soundUp();
tv.soundDown();
tv.powerOff();
}
}
인터페이스하나 클래스 하나 생성
getter, setter, toString
package test0707;
public class BoardVo {
private String id;
private String pwd;
private String ch1;
private String ch2;
public String getCh1() {
return ch1;
}
public void setCh1(String ch1) {
this.ch1 = ch1;
}
public String getCh2() {
return ch2;
}
public void setCh2(String ch2) {
this.ch2 = ch2;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() { //return하기 전에 값이 정상적으로 확인하기 위해서 toString을 쓴다
return "BoardVo [id=" + id + ", pwd=" + pwd + "]";
}
}
package board;
import java.util.List;
public interface Board {
//C- insert, R- select, U- update, D-delete
public void insert(String str1, String str2);// 하나하나 받아도 되고
public void insert(BoardVo vo); //vo로 통으로 받아도 된다
public int insert2(BoardVo vo); //int는 성공일때 1 리턴, 실패하면 리턴 안함
public void update(String str1, String str2); //insert랑 유사
public void update(BoardVo vo); //기본
public int update2(BoardVo vo);
public void delete(String str); //delete는 값을 하나만(pk) 받아오면 되서 vo를 쓰진않음
public int delete2(String str); //vo로 받는다고 해서 문제가 되진 않는다
public BoardVo selectOne(String str); //값 하나 받기
public List<BoardVo> selectAll(String str1, String str2); // 여러 값 받기
public List<BoardVo> selectAll(BoardVo vo);// vo로 써도됨
//public List<BoardVo> selectAll(); 전체값 받기
//전체 레코드 수 받아오는 메소드 만들기
public int count();
}
스쿨보드 클래스 만들고 \ 보드 패키지 만들어서 옮기기
인터페이스 불러오기
package board;
import java.util.List;
public class SchoolBoard implements Board{
@Override
public void insert(String str1, String str2) {
System.out.println("저장완료!");
}
@Override
public void insert(BoardVo vo) {
// TODO Auto-generated method stub
}
@Override
public int insert2(BoardVo vo) {
// TODO Auto-generated method stub
return 0;
}
@Override
public void update(String str1, String str2) {
// TODO Auto-generated method stub
}
@Override
public void update(BoardVo vo) {
// TODO Auto-generated method stub
}
@Override
public int update2(BoardVo vo) {
// TODO Auto-generated method stub
return 0;
}
@Override
public void delete(String str) {
// TODO Auto-generated method stub
}
@Override
public int delete2(String str) {
// TODO Auto-generated method stub
return 0;
}
@Override
public BoardVo selectOne(String str) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<BoardVo> selectAll(String str1, String str2) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<BoardVo> selectAll(BoardVo vo) {
// TODO Auto-generated method stub
return null;
}
@Override
public int count() {
// TODO Auto-generated method stub
return 0;
}
}
메인함수 만들어서 SchoolBoard에 insert 메소드 실행하기
selectOne 을 메인함수에서 찍을 수 있게 리턴하기
selectAll 활용하기
main 은 service를 사용하고 service는 board를 사용하게 하는 구조 만들기
(결합도 낮게하려고)
*board는 종단 작업인 것
BoardVo 만들기
package board;
public class BoardVo {
private int idx;
private String title;
private String name;
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "BoardVo [idx=" + idx + ", title=" + title + ", name=" + name + "]";
}
}
인터페이스 만들기
package board;
import java.util.List;
public interface Board {
void insert(BoardVo vo);
BoardVo content(int k);
List<BoardVo> selectAll();
}
Boardimpl 클래스 만들기
package board;
import java.util.List;
public class Boardimpl implements Board{
@Override
public void insert(BoardVo vo) {
// TODO Auto-generated method stub
}
@Override
public BoardVo content(int k) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<BoardVo> selectAll() {
// TODO Auto-generated method stub
return null;
}
}
BoardService 인터페이스 만들기
package board;
import java.util.List;
public interface BoardService {
void insert(BoardVo vo);
BoardVo content(int k);
List<BoardVo> selectAll();
}
BoardServiceimpl 클래스 만들기
package board;
import java.util.List;
public class BoardServiceimpl implements BoardService{
@Override
public void insert(BoardVo vo) {
// TODO Auto-generated method stub
}
@Override
public BoardVo content(int k) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<BoardVo> selectAll() {
// TODO Auto-generated method stub
return null;
}
}
MainTest 메인클래스 만들기
'JAVA' 카테고리의 다른 글
[35일차] chap5. 데이터 타입 분류 (p138 ~ ) (0) | 2022.07.08 |
---|---|
[34일차] 서비스 사용하기 (0) | 2022.07.07 |
[33일차] (0) | 2022.07.06 |
[32일차] 자바 연산자 (0) | 2022.07.05 |
[32일차] 자바 메소드 만들기 (0) | 2022.07.05 |