본문 바로가기
교육/Java&Spring

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 25

by Renechoi 2023. 1. 26.

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 25


 

 

특정 문자를 찾는 메서드 구현 

 

public Books findBooksByContaining(String value) throws SQLException {
    ResultSet resultSet = selectAll();

    List<Book> books = new ArrayList<>();
    while (resultSet.next()) {
        books.add(new Book(
                resultSet.getInt("book_id"),
                resultSet.getString("title"),
                resultSet.getString("publisher"),
                resultSet.getString("pub_date"),
                resultSet.getInt("author_id")));
    }

    return new Books(books.stream()
            .filter(book -> book.contains(value))
            .collect(Collectors.toList()));
}

 

package kosta.basic.day024.book;

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

public class Books {
    List<Book> books = new ArrayList<>();

    public Books() {
    }

    public Books(List<Book> books) {
        this.books = books;
    }

    public Books(Book... books) {
        this.books = Arrays.asList(books);
    }

    public void show(){
        books.forEach(Book::show);
    }

    @Override
    public String toString() {
        return "Books list {" + "books=" + books + '}';
    }
}

 

private static void show(BookDao bookDao) throws SQLException {
    Books books = bookDao.findBooksByContaining("출");
    books.show();
}

 

 

 

 

 

질문 사항 : 

 

author와 book 엔티티가 별도로 존재하는 상황에서 dao 인터페이스를 구현하고 해당 인터페이스를 구현하는 authorDao를 만들었다.

 

그런데 문제는 dao가 Book에는 호환이 되지 않는다는 점이다. 

 

왜냐하면 dao I는 authorVo를 받도록 생성되는데, 여기서 각각의 vo마다 타입이 다르기 때문. 이거를 해결하고자 한다면 object로 받아 업캐스팅을 시켜버리는 방법도 있지만 이것은 좋은 방법이 아니라고 생각했다. 그렇다고 vo라는 abstract나 interface를 구현하자니 엔티티별로 존재가 다른데 논리적인 연결성이 말이 안되는 상황. 

 

여기서 생각해볼 점은 그렇다면 dao - > authorDao가 그렇다면 필요한가이다. 

 

만약 dao를 통해 

-> authorDao

-> bookDao

-> accountDao 

등으로 확장이 된다면 dao라는 인터페이스의 존재 이유가 있을 테지만 하나의 엔티티에 대해서만 맵핑이 된다면 그 의미가 무엇이냐는 것이다. 

 

이러한 질문에 대한 답변은 현업에서의 규약을 위한 것 이라고 한다. 

팀장이 인터페이스만 만들어서 던져주면 팀원들이 같은 규약을 갖고 구현을 한다고... 

 

그런데 이것을 고민해보다 방법을 찾았는데 

그것은 인터페이스에 generic을 사용하는 것이었다. 

 

public interface Dao<T> {

    int insert(T t) throws SQLException;

 

 

Dao 인터페이스가 타입 T를 받도록 구현했고 

 

AuthorDao는 AuthorVo 타입을 인자로 한 구현을 실행한다. 

 

 

메인에서 소환할 때 다음과 같이 바꿔준다. 

 

 

insert 코드의 수정이 필요 없이 깔끔하게 돌아감. 

 

 


 

 

html을 배워보자 

 

 

하이퍼링크 개념을 도입한 html을 1989년 도입 

 

www : 전 세계 인터넷상의 콘텐츠를 연결, 공유할 수 있는 인터넷 기반 서비스 

 

 

Http : hyper text transfer protocol 

 

인터넷이 곧 www인 것은 아니다 

 

 

 

 

 

url 

 

 

 

 

html 자체는 정적이다 

 

 

 

 

jsp 코드 예시 

 

 

 

 

 

 


 

 

img src 잡는 법 : 

../ 하위 주소들 

 

 

 

 

p 태그의 특성 : 블럭형 value 

=> 등장할 때마다 아래로 쌓인다 

 

em 태그의 특성 : 인라인 특성 

=> 옆으로 간다 

 

 

 

 

 

기본 마크업 태그 h1 

 

 

 

div 

- CSS 스타일을 적용하여 디자인을 입힐 때 많이 사용

- 블록레벨 엘리먼트들을 그룹으로 묶음

 

<div style='background-color: #008000'> <h1>제목</h1>
<p>문장</p> </div>

 

span

spanhtml문서에서 인라인레벨 엘리먼트를 그룹으로 묶을 때 사용

 

 

인라인 방식으로 css 

 

<h1 style='font-size:24px; font-family:궁서체; color:#06f;'>Windows 7과 Mac OSX 비교</h1>

 

 

 

반응형