java 2022/02/24 (상속자(Override) )

무간·2022년 2월 24일

파일명 / basic/ Parent.java , Parent1.java

  • Parent.java

package com.example.basic;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public abstract class Parent {
    
    // 클래스의 공통변수
    private int num = 0;

    // 클래스명과 일치 생선자, 여러개 가능 (오브로딩)
    public Parent(){

    }

    // 생성자 //// 생성자를 수동으로 생성할경우 꼭 빈 생성자를 만들어 주어야 함
    public Parent(int num) {
        this.num = num;
    }

    // getter/ setter

    // 메소드
    public void printNum(){
        System.out.println(this.num);
    }

    // 메소드는 기능구현X, 자식은 반드시 기능을 구현해야함.
    // 설계용.  abstract << 기능구현을 하지 않을때 사용. 위쪽에 클래스에도 abstract을 넣어주어야함
    public abstract void printNum1();    
}
  • Parent1.java

package com.example.basic;

// interface === abstract class
public interface Parent1 {
        
    public void printA();
    public void printB();

    // 클래스에서 정의
    // public abstract void printNum1();    
}

파일명 / basic/ Child1.java

  • Parent에서 abstract class로 받은 부분
package com.example.basic;

// Parent는 라이브러리이고 Child1을 만드는데 기존의 기능 + 새로운 기능추가(활용)
public class Child1 extends Parent implements Parent1 {  // extends <= 사용할때   Parent <= 이 파일을 
                                // implements  interface를 추가로 사용할때  Parent1 <= 이 파일을 (n개 사용가능)   

    public Child1() {
        super();
        // 이런 생성자 호출 => public Parent()
    }

    public Child1(int num) {
        // super 부모의 생성자를 호출
        super(num);
        // 이런 생성자 호출 => public Parent(int num)
    }

    @Override // 부모의 기능을 재구현(부모의 구현부 + 자식의 구현부)
    public void printNum() {        
        super.printNum();
        // 부모의 메소드가 호출
        System.out.println("Child1에서 출력");
    }  

    // 부모와 전혀 상관 없는 메소드
    public void printChild1(){
        System.out.println("PrintChild1");
    }

    @Override
    public void printNum1() {
        // TODO Auto-generated method stub
        System.out.println("printChild-printNum1");        
    }

  • Parent1 에서 interface로 받은부분
    @Override
    public void printA() {
        
    }

    @Override
    public void printB() {
                
    }    
}

파일명 / vo/ Board.java

  • BoardDBImpl.java 에서 사용할 변수 설정
package com.example.vo;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString

// 파일명 : Board.java
public class Board {
    // 1. 변수설정 (ERD 다이어그램에서 참고해서)
    // 글번호, 제목, 내용, 작성자, 조회수,
    private long no = 0L;
    private String title = null;
    private String content = null;
    private String writer = null;
    private int hit = 0;
}

파일명 / db/ BoardDB.java

  • App.java에 필요한 메소드 설계
    BoardDBImpl.java 에 Override하여 사용
package com.example.db;

import java.util.List;

import com.example.vo.Board;

// 설계
public interface BoardDB {    
    // 게시판 글쓰기
    public int insertBoard( Board board );
    // 게시판 삭제
    public int deleteBoard( Board board );
    // 게시판 수정
    public int updateBoard( Board board );
    // 게시판 1개 조회
    public Board selectOneBoard( Board board );
    // 게시팜 목록(ArrayList <- List)
    public List<Board> selectListBoard(  );
}

파일명 / db/ BoardDBImpl.java

  • BoardDB.java에서 설계된 메소드를
    Override해서 사용. 실질적으로 작업이 이루어지는 곳
package com.example.db;

import java.util.ArrayList;
import java.util.List;

import com.example.vo.Board;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.InsertOneResult;
import com.mongodb.client.result.UpdateResult;

import org.bson.Document;
import org.bson.conversions.Bson;

public class BoardDBImpl implements BoardDB {    
    private final String url = "mongodb://id219:pw219@1.234.5.158:37017/db219";

    private MongoCollection<Document> collection = null;

    // 생성자에서 외부에서 객체를 생성하는 시점에 db연결하고 컬렉션도 선택
    public BoardDBImpl() {
        // 1. 접속하기 static로 되어있음. 접속은 객체를 n개 생성 불가
        MongoClient client = MongoClients.create(this.url);
        // 2. db연결
        MongoDatabase db = client.getDatabase("db219");
        // 3. 컬렉션 선택 (member2) 
        this.collection = db.getCollection("board2");
    }


    // 게시판 글 추가
    @Override
    public int insertBoard(Board board) {
        try{
            // 2. Document 생성            
            Document doc = new Document();
            doc.append("_id", board.getNo());
            doc.append("title", board.getTitle());
            doc.append("content", board.getContent());
            doc.append("writer", board.getWriter());
            doc.append("hit", board.getHit());
            
            //1. 컬렉션에 데이터를 추가하기(Document가 필요)
            // result에 추가했던 _id의 값이 리턴됨
            InsertOneResult result = this.collection.insertOne(doc);
            
            // String aa="aa"; => if(aa.equaps("aa")){}
            // long aa = 1L;   => if(aa == 2)()

            if(result.getInsertedId().asInt64().getValue() == board.getNo() ){
                return 1; // 성공
            }
            return 0;    // 실패
        }
        catch(Exception e){
            e.printStackTrace(); //오류출력
            return -1;
        }        
    }

    // 게시판 글 삭제
    @Override
    public int deleteBoard(Board board) {
        try{
            // 2. bson
            Bson bson = Filters.eq("_id", board.getNo());

            // 1. 삭제 (Bson)
            DeleteResult result = this.collection.deleteOne(bson);
            if(result.getDeletedCount() == 1L){
                return 1;
            }
            return 0;
        }
        catch(Exception e){
            e.printStackTrace(); //오류출력
            return 0;
        }        
    }

    // 게시판 글 수정
    @Override
    public int updateBoard(Board board) {
        try{
            //Bson(조건)
            Bson bson = Filters.eq("_id", board.getNo());

            // Bson(변경값)
            Bson bson1 = Updates.set("title", board.getTitle());
            Bson bson2 = Updates.set("content", board.getContent());
            Bson bson3 = Updates.set("writer", board.getWriter());

            // Bson을 합침
            Bson bson4 = Updates.combine(bson1,bson2,bson3);

            // Bson(조건), Bson(변경값)
            UpdateResult result = this.collection.updateOne(bson, bson4);
            if(result.getModifiedCount() == 1L){
                return 1;
            }
          
            return 0;
        }
        catch(Exception e){
            e.printStackTrace(); //오류출력
            return 0;
        }        
    }

    // 게시판 글 1개 조회
    @Override
    public Board selectOneBoard(Board board) {
        try{
            Bson bson = Filters.eq("_id", board.getNo());

            // List<String> <= "aaa", "bbb", "ccc"
            FindIterable<Document> rows = this.collection.find(bson);
            for(Document tmp : rows){
                return new Board(
                    tmp.getLong("_id"),
                    tmp.getString("title"),
                    tmp.getString("content"),
                    tmp.getString("writer"),
                    tmp.getInteger("hit")               
                );                
            }
            return null;          
        }
        catch(Exception e){
            e.printStackTrace(); //오류출력
            return null;
        }        
    }

    // 게시판 글 전체 조회
    @Override
    public List<Board> selectListBoard() {
        try{            
            FindIterable<Document> rows = this.collection.find().sort(Filters.eq("_id", 1) );

            // Board를 n개 보관할 수 있는 list변수 ArrayList(가변길이 배열) [{},{},{}...]
            // list ===> null
            List<Board> list = new ArrayList<Board>();            

            // board에 내용을 rows수 만큼 넣음
            for(Document tmp : rows){
                // 여러개를 보관할때는 객체를 여기에 만듬(for문 안쪽)
                Board board = new Board(                
                    tmp.getLong("_id"),
                    tmp.getString("title"),
                    tmp.getString("content"),
                    tmp.getString("writer"),
                    tmp.getInteger("hit")
                );
                list.add(board); // board를 list에 넣음
            }
            return list;          
        }
        catch(Exception e){
            e.printStackTrace(); //오류출력
            return null;
        }        
    }   
}

파일명 App.java

  • 프로그램의 시작 BoardDB.java와 연동하여 사용
package com.example;

import java.util.List;

import com.example.db.BoardDB;
import com.example.db.BoardDBImpl;
import com.example.vo.Board;

// 프로그램 시작 위치
public class App {
    public static void main(String[] args) {        
                
        // 0. 객체 생성, 클래스명 객체명 = new 생성자();
        BoardDB obj = new BoardDBImpl();

        // // 1. 게시판 글쓰기 수행
        // Board board = new Board(4L, "제목", "내용1", "작성자1", 100);        
        // int ret = obj.insertBoard(board);
        // System.out.println(ret);
        
        // // 2. 게시판 글 삭제        
        // Board board = new Board();
        // board.setNo(4);
        // int ret = obj.deleteBoard(board);
        // System.out.println(ret);

        // // 3. 게시판 글 수정
        // Board board = new Board(2L, "제목1", "내용1", "작성자1", 0);        
        // int ret = obj.updateBoard(board);
        // System.out.println(ret);

        // // 4. 게시판 글 1개 조회
        // Board board = new Board();
        // board.setNo(2);
        // Board board1 = obj.selectOneBoard(board);
        // System.out.println(board1.toString());
               
        // 5. 게시판 글 전체 조회
        List<Board> list = obj.selectListBoard();
        for( Board tmp : list ){
            System.out.println(tmp.toString());
        }       
    }
}

   
profile
당신을 한 줄로 소개해보세요

0개의 댓글