[우아한테크코스] 5주차후기 - 데이터베이스 개론 및 과제 피드백
이번 주 글은 후기와 피드백을 같이 적어본다.
날짜 | TODO | 추가 공부 |
---|---|---|
6/3 (월) | 로또 리뷰 | - |
6/4(화) | 강의 (데이터베이스) | 책-객체지향과 디자인패턴 |
6/5 (수) | 프로그래밍 (로또 리뷰) | 객체지향 사실과 오해 |
6/6 (목) | 예비군 | |
6/7 (금) | 휴무 | 로또 웹 UI 적용 |
6/8 (토) | 운동 |
이번 주는 휴무와 겹쳐서 여유가 조금 있는 한 주 였다.
강의: 데이터베이스 개론
준 코치님께서 데이터베이스에 대해 강의를 해주셨다. 준 코치님은 볼때 마다 항상 웃는 모습으로 인사를 해주셔서 너무 좋다. 강의는 간략한 개론으로, 강의 후 자기주도적으로 공부를 하면 되었다.
데이터와 정보의 차이
데이터 - 현실 세계에서 관찰하거나 측정한 사실 또는 값
정보 - 의사결정에 활용하기 위해 데이터를 처리한 결과물
먼저 위에 보이는 것 처럼 데이터와 정보의 차이에 대해서 설명을 해주셨다. 두 단어가 같은 의미인줄 알았지만 사실 저렇게 달랐다. 저 정의에 따르면 데이터는 조금 더 raw한 것이고 정보는 그것을 한 단계 가공한 것이라고 볼 수 있겠다.
데이터베이스 관리 시스템
데이터베이스 관리 시스템, 일명 DBMS는 데이터베이스의 생성과 관리를 담당하는 소프트웨어이다. 대표적으로 MySQL, Oracle 등이 있다.
JDBC
자바 표준 인터페이스로 자바를 이용하여 DBMS에 일관적인 방식으로 접근할 수 있도록 해주는 API이다.
보는 것 처럼 JDBC를 이용하면 4단계로 이루어진다. 그리고 실습을 해보았다.
그리고 한 가지 의문점이 생겼다. JDBC Driver를 로딩 후 바로 커넥션을 생성하는 부분에서 이해가 되지 않았다. 그래서 그 날은 그냥 저 부분을 계속 파보고 따로 정리를 하였다.
https://pjh3749.tistory.com/250
5주차 피드백 - 로또 미션
어떤 특정 상태를 프린트할 때 출력기능을 도메인 객체안에서 진행했었다. 하지만 그것이 코드 복잡도를 높이는 설계라고 했다.
도메인에서 관리하는 값
해당 클래스는 인풋을 담당하는 클래스인데 여기서 로또 가격인 1000원이라는 숫자를 이용해야 했다. 하지만 저 1000원이라는 가격은 로또의 속성이므로 따로 값이 돌아다니게 되면 (실제로 1000원을 여러 클래스에서 이용하고있었다) 가격이 바뀌었을 때 여러 곳을 수정해야 한다. 따라서 로또 클래스 안에 public으로 가격의 값을 열어주었다.
코치님께 팁을 하나 주셨는데 네이밍도 LOTTO_PRICE가아닌 그냥 PRICE로 하는 것을 추천하셨다. Public이니까 접근 할 때
Lotto.PRICE // 읽기 좋음
Lotto.LOTTO_PRICE
이런식으로 접근하게 될 텐데 보는 것처럼 위가 더 읽기 좋기 때문이다.
객체 비교: Integer.compare의 사용
@Override
public int compareTo(LottoNumber o) {
if (this.lottoNum > o.lottoNum) {
return 1;
}
if (this.lottoNum < o.lottoNum) {
return -1;
}
return 0;
}
이런 코드보다
@Override
public int compareTo(LottoNumber o) {
return Integer.compare(this.lottoNum, o.lottoNum);
}
이렇게 변환하는게 훨씬 간편하다. 내부적으로 compare는 이렇게 원하는 로직으로 이미 구현 되어 있다. 굳이 내가 재정의해서 쓸 필요 없이 그대로 쓰면 코드가 간결해진다.
객체의 책임
수동으로 구매할 때 돈이 부족한지 판단하는 부분이다. 서비스 계층에 도메인 로직이 포함되어 있으면 안된다.
PurchaseMoney에서 돈이 적절한지 판단하는 부분으로 로직을 옮겼다. 이처럼 나도 모르게 무의식적으로 get을 해서 연산을 했던 부분이 종종 발견되었다. 객체의 역할에 대해서 조금 더 신경을 써야겠다.
스트림의 사용
스트림을 잘 사용하면 반복된 if문을 제거 할 수 있다.
중첩된 if문의 사용 모습
if (FIRST.match(matchCount)) {
return FIRST;
}
if (SECOND.match(matchCount) && bonusMatch) {
return SECOND;
}
if (THIRD.match(matchCount)) {
return THIRD;
}
if (FOURTH.match(matchCount)) {
return FOURTH;
}
if (FIFTH.match(matchCount)) {
return FIFTH;
}
return NONE;
이런식으로 stream을 써서 간결하게 만들 수 있다.