본문 바로가기

우아한테크코스

[우테코 프리코스] 4주차

과제하면서 공부한 것들(중요 포인트!)

  1. 인터페이스
    기본으로 제공된 BridgeNumberGenerator 가 인터페이스이고 BridgeRandomNumberGenerator 은 그 인터페이스를 상속받는다.
  • 인터페이스는 무엇일까
    출처 : https://life-with-coding.tistory.com/488
    인터페이스는 추상 메서드만을 가질 수 있고 구현메서드는 가질 수 없는 일종의 추상 클래스입니다.
    위의 추상 클래스와 다른 점은 자식 클래스들의 기능 유사도인데요. 추상클래스는 서로 비슷한 기능을 하는 클래스들을 묶을 때 사용하며, 인터페이스는 서로 다른 기능을 하는 클래스들을 묶을 때 인터페이스를 사용합니다.
    인터페이스는 100% 다형성 보장
    부모 클래스가 인터페이스이면 자식 클래스가 무조건 구현되어야 합니다.
    즉 부모 인터페이스의 모든 메서드들을 자식 클래스에서 반드시 재정의되어야 하기 때문에 다형성이 보장됩니다. 

출처 : https://limkydev.tistory.com/197

public interface 인터페이스명 {
 
//상수
타입 상수명 = 값;
 
//추상 메소드
타입 메소드명(매개변수, ... );
 
//디폴트 메소드
default 타입 메소드명(매개변수, ... ){
  //구현부
}
 
//정적 메소드
static 타입 메소드명(매개변수) {
  //구현부
}
 
}
 
그럼 각각 어떤 의미가 있는지 직역해보자.
 
상수 : 인터페이스에서 값을 정해줄테니 함부로 바꾸지 말고 제공해주는 값만 참조해라 (절대적)
추상메소드 : 가이드만 줄테니 추상메소드를 오버라이팅해서 재구현해라. (강제적)
디폴트메소드 : 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현해서 써라. (선택적)
정적메소드 : 인터페이스에서 제공해주는 것으로 무조건 사용 (절대적)

출처 : https://wikidocs.net/217

인터페이스의 메소드는 메소드의 이름과 입출력에 대한 정의만 있고 그 내용은 없다. 
그 이유는 인터페이스는 규칙이기 때문이다. 
위에서 설정한 getFood라는 메소드는 인터페이스를 implements한 클래스들이 구현해야만 하는 것이다.


2. 예외처리

  • 2주차때는 입력값 오류가 나면 그냥 throw 를 던져버려서 프로그램 종료를 시켰고 3주차때는 에러메세지를 출력해야 해서 main 에서 캐치만 해서 에러메세지 출력만 하고 프로그램을 종료시켰다
  • 이번 주차에는 인풋 에러가 나면 에러 메세지를 출력해주고 에러가 난 부분부터 다시 인풋을 받아야 한다
  • 예외 클래스의 구조
상태값을 갖는 객체에서는 상태값을 외부에서 직접 접근해 변경하지 못하도록 메소드만 노출시킨다. 
이때, 멤버변수(상태값)는 접근 제한자를 private으로 설정해 직접적인 접근을 막고, 
getter와 setter를 이용해서만 변수에 접근이 가능하도록 한다.

를 지키자. 지금까지 너무 필드에 바로 접근해버렸다.. static 을 너무 남발하는 건 없앴지만 public 으로 선언하고 인스턴스에서 바로 접근해버렸다.. private 으로 보호하고 메소드로 접근하자. 

하지만 공통 피드백에도 있었듯이 getter 와 setter 를 남용하지 말자!

상태를 가지는 객체를 추가했다면 객체가 제대로 된 역할을 하도록 구현해야 한다.
객체가 로직을 구현하도록 해야한다.
상태 데이터를 꺼내 로직을 처리하도록 구현하지 말고 객체에 메시지를 보내 일을 하도록 리팩토링한다.

setter 는 사용안하게끔 구현했다 !
getter 는 출력할때 제외하고 한군데 사용했는데 그걸 없애려면 변수 하나 더 만들어야 해서 그냥 놔두기로 했다.. 

후기

  • 4주차 중에 제일 열심히 했던 주차였다. 물론 다른 분들에 비해서 많이 모자란 듯하다. 그래도 객체를 객체답게 사용해라라는 말이 와닿기 시작했고 객체 지향으로 구현하는 거에 많이 익숙해진 느낌이다. (상대적으로!!) 
  • 요구사항이 많아서 더 까다로울 줄 알았는데 나는 사실 더 편했다. 사용해야 하는 클래스들도 다 정해진 상태여서 어떻게 클래스를 만들어서 기능을 수행하도록 시킬지 고민하는 시간이 많이 줄었었다
  • 10줄 제한, 파라미터 3개 이하도 어렵진 않았다 맨날 하던거라..
  • 3주차때가 정말 힘들었는데 과제 4개 다 제출하고 완주했다는게 뿌듯하다 !
  • stream 사용을 아직 잘 못한다 사실 람다식도 잘 이해가 안간다 ㅠㅠ 정말 c스럽게 짠다고 코딩하면서도 느꼈다 자바를 한껏 활용해서 짜고싶다 .......
  • 인스턴스 생성해야 해서 필드가 너무 많아지는데 이렇게 짜도 괜찮은건가 싶다 대충 검색해보니 클린 코드 얘기가 많이 나와서 책 한번 읽어봐야겠다
  • 과제 제출 페이지에 쓴 소감 발췌
자바와 객체 지향 코드에 대해서 정말 무지했었는데 4주동안 프리코스를 진행하면서 성장을 할 수 있었습니다. 
지원하기 전에 많은 지원자들 사이에서 떨어지면 시간 낭비만 되는 것이 아닐까 고민을 했었는데 
끝나고 보니 붙고 떨어짐에 관계 없이 짧은 시간 내에 긍정적인 방향으로 발전을 한 거 같아서 참여하길 정말 잘했다는 생각이 듭니다. 
많은 인원들에게 좋은 기회를 주시기 위해서 프리코스를 진행해주신 우테코 코치님들과 운영진 여러분에게 정말 감사를 드립니다 !!
  • 이제 우테코는 보내주고 다른 거 할거 해야겠다 할게 너무 많다