티스토리 뷰

Language/Java

Java - DB 기능 구현 예제

ShinyOcean 2021. 9. 8. 23:53

 

안녕하세요

 

shiny ocean 입니다 : )

 

벌써 3학년 2학기가 시작되었습니다. 요즘은 백준 알고리즘 문제 풀이와 대학교 전공과목 수강으로 아주바쁜? 날들을 보내고 있었습니다!

 

그러다가 데이터베이스 과목 교수님께서 의미 있는 코딩 과제를 주셔서 오랜만에 열심히 한번 해보았습니다.

 

개발언어와 환경은 자유롭게 선택하게 해주셔서 오랜만에 자바가 쓰고 싶더군요.. 요즘 파이썬으로만 알고리즘 문제를 주구장창 풀어서 그런지 조금 로우레벨의 코딩을 해보고 싶었어요! 물론 자바도 절대 로우레벨은 아니지만 파이썬에 비하면 조금은 신경써줘야 할것들이 많은 편이니까요!

 

두가지 테이블에 있는 공통된 속성값을 통해 원하는 결과행들을 출력하는 과제였습니다. 각 테이블의 조건 검사 과정이 마치 관계형 데이터베이스(RDB)의 select 쿼리를 사용하는 것과 비슷한 로직을 구현해야 했습니다.

 

데이터 베이스의 기초적인 원리를 실습해보기에 아주 좋은 예제 였습니다. 물론 실제 구현은 간단하지만은 않았습니다...

 

어쨋든 문제는 아래와 같습니다.

 

 

문제 정의

 

자신이 아는 프로그래밍 언어를 사용해 풀어보세요.

 

Q: Find the information about all the instructors who work in the Watson building.

 

 

 

문제 해석

해당 문제를 해석했을때 왓슨 빌딩에서 일하는 강사(instructors)들의 정보를 출력하라일 것 같습니다.

 

테이블은 총 3가지로 주어졌지만, fig 2.5 <the department relation>의 경우 강사와 관련된 데이터는 아닌 것으로 판단되었습니다. (출력 데이터에서 fig 2.5의 데이터는 제외)

 

fig 2.6에서 왓슨(watson) 빌딩에서 일하는 강사들의 행데이터를 추출하고, 그 데이터들중 course_idsec_id를 통해 fig 2.7에서 해당 강사의 ID또한 추출하여 최종 데이터를 출력하는 방법으로 문제를 해결해보겠습니다. 그림으로 표현하면 아래와 같습니다.

 

 

 

 

코드 로직 설계

 

테이블 객체를 선언하기 전에 행 객체를 먼저 선언해 주었습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// class of fig2.6's row
class  Fig26Row {
    String  course_id;
    int  sec_id;
    String  semester;
    int  year;
    String  building;
    int  room_number;
    char  time_slot_id;
    public  Fig26Row(String  course_id, int  sec_id, String  semester, int  year, String  building, int  room_number,char  time_slot_id){ // fig26 행의 생성자
        this .course_id= course_id;
        this .sec_id = sec_id;
        this .semester = semester;
        this .year = year;
        this .building =building;
        this .room_number =room_number;
        this .time_slot_id = time_slot_id;
    }
}
// class of fig2.7's row
class  Fig27Row {
    int  ID;
    String  course_id;
    int  sec_id;
    String  semester;
    int  year;
    public  Fig27Row(int  ID,String  course_id, int  sec_id, String  semester, int  year){ // fig27 행의 생성자
        this .ID =ID;
        this .course_id= course_id;
        this .sec_id = sec_id;
        this .semester = semester;
        this .year = year;
    }
}
cs

 

 

각각의 행 객체들은 생성자를 통해 값을 초기화 할수 있게 해주었습니다. Row를 정의 할수 있다면 조건문을 통해 각 테이블간의 필요한 행들을 추출해낼수 있을 것 같았습니다.

 

Fig2.6의 테이블의 building 속성값을 통해 필요한 행을 배열로 만들어 리턴하는 findByBuilding()메소드를 선언하여 사용했으며 리턴한 행 배열을 rowOfFig26이라는 변수명으로 초기화했습니다.

 

다음은 rowOfFig26을 매개변수로 받아 course_idsec_id 속성을 통해 필요한 행을 배열로 만들어 리턴하는 findById() 메소드를 선언하여 사용했습니다.

 

findByBuilding(“빌딩이름”) = Fig2.6의 테이블에서 추출한 Fig26row를 얻을수 있음

findById(“Fig26 행 배열”) = Fig2.7의 테이블에서 추출한 Fig27row를 얻을수 있음

 

각각의 결과 row를 메인메소드 내에서 for loop를 통해 출력후 종료했습니다.

 

 

메인클래스)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class main{
    static void run(){
        Fig26 table1 = new Fig26();
        Fig27 table2 = new Fig27();
 
        // 빌딩이름이 Watson인 행 객체들의 배열을 리턴받아옴
        Fig26Row[] rowOfFig26 =table1.findByBuilding("Watson"); 
        //위에서 받아온 행객체를 매개변수로 하여 fig2.7의 row를 리턴 받아옴, ID값을 얻기 위함
        Fig27Row[] rowOfFig27 = table2.findById(rowOfFig26);
 
 
        System.out.println("ID, c_id, sec_id, year, build, r_num, t_slot");
        for(int i =0; i<rowOfFig27.length;i++){
            System.out.println(rowOfFig27[i].ID+" "+ rowOfFig27[i].course_id +" "+ rowOfFig27[i].sec_id +" "+rowOfFig27[i].semester + " "+rowOfFig27[i].year+" "+
            rowOfFig26[i].building+" "+rowOfFig26[i].room_number+" "+rowOfFig26[i].time_slot_id);
        }
 
    }
    public static void main(String[] args) {
        run();
    }
}
cs

디버깅 결과

 

“Watson”을 입력으로 취할 경우)

 

 

결과 콘솔

 

 

 

 

 

마치며.

무더운 여름이 거의 다 지나가고 있습니다.

 

저는 개인적으로 여름을 좋아하지 않습니다.

 

너무나도 더웠던 2018년 여름,

입대 5개월차 일병이었던 저는 GOP라인 벌목 작업을 매일매일 했었습니다. 온몸이 땀범벅에 톱질을 아무리해도 안넘어가는 야속한 나무 때문에 팔은 아파죽겠고 선임 눈치는 더 보이고... 21살 소년에게는 잔인했던 여름이었습니다.

 

원래 더위를 잘타 여름을 좋아하지 않았는데 그 이후로 더 싫어졌습니다.

 

어쨋든 여름이 다 지나가는 것이 느껴지니 올해도 반이 훨씬 지난것 같습니다. 남은날들도 열심히 살아보려 합니다.

 

군시절 아무리 넘어가지 않던 나무도 죽어라 톱질하니 점점 기울더니 쿵 소리를 내며 부러졌습니다. 지금 제 프로그래밍 피지컬이 그런거 같습니다.

 

지금 당장은 아무런 발전이 없는것 같아 보이지만 계속 꾸준히 하다보면 언젠가는 향상된 실력을 체감하는 날이 올것이라 믿습니다. 

 

여러분들도 하시는일에 끈기를 가지고 절대 포기하지마세요!!

꼭 원하시는 결과 다 얻어내실것입니다!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함