본문 바로가기
Java/우테코 프리코스

[우아한테크코스 6기] 1주차 프리코스 회고록

by 위대한초밥V 2023. 10. 29.

우아한 테크코스 참여를 시작하며…

올해에도 역시 낙엽과 함께 우테코의 계절이 왔다!!!

 

작년에도 프리코스에 참여했지만,,, 오프라인 코테도 참여 못하고 떨어졌다.

그래도 몰입하여 4주간의 프리코스를 참여하고, 매주 주어진 미션을 수행한 경험이 나에게 무척이나 유익했다. 프리코스 참여가 전원 확대되면서 누구나 참여할 수 있었고, slack을 통해 서로 으쌰으쌰하고 다른 사람들의 코드를 리뷰하면서 새로운 지식도 쌓을 수 있었기 때문이다.

다만,,, 1년전의 나는 너~무 바빴기 때문에 우테코에 완전 몰입할 수 없었고ㅎㅎ 항상 바쁘게 과제를 했던게 아쉬움으로 남았다.

그래서 이번 6기 프리코스에서 내가 얻어가고 싶은 것은 크게 2️⃣가지이다.

 

  1. 자바와 객체지향 익히기: 아직 모르는게 많다. 왜 코드를 이렇게 작성했는지 설명하기 어렵다.
  2. 소속감: 혼자 공부하는 취준생은 동지가 필요하다. 열심히 리뷰하면서 커뮤니케이션하고 싶다.

 


 

⚾️ 1주차 시작 ⚾️

https://github.com/woowacourse-precourse/java-baseball-6/pull/2105

 

[숫자 야구 게임] 김정인 미션 제출합니다. by mywnajsldkf · Pull Request #2105 · woowacourse-precourse/java-base

나의 1주차 과제 목표 1주차 과제로 나온 구글 자바 스타일가이드를 따르자. 객체지향 생활 체조 원칙 9가지를 지키자. keep 코드를 읽는 사람의 입장에서 생각하려고 했습니다. 반복문을 사용하

github.com

 

미션 시작

1주차 미션은 숫자 야구를 구현하는 것이다. 이밖에도 개발 환경 셋팅과 GitHub을 익히는 시간도 필요하다.

나는 추가로 아래의 두 목표를 세웠다.

 

미션 수행

다음은 미션을 수행하면서 고민한 내용과 새롭게 알게된 것들을 정리해보겠다.

 

static은 언제 사용하는게 좋을까?

그동안 static을 붙이면, 다음의 특징을 갖고 있음을 알고 있었다.

  • 클래스가 로딩되고 즉시 사용할 수 있으며
  • static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든 참조할 수 있다

하지만 그 사용을 남발해왔다.

 

static을 사용하면 메모리 문제, 동시성 이슈 문제, 런타임 다형성 불가, 객체 상태 이용 불가, 어려움 테스트 의 문제가 있다.

이러한 이유로 지양하는 것이 맞지만, 사용하면 좋은 상황이 있다.

  1. 절대 변하지 않는 변수, 상수 정의
  2. 객체의 상태를 이용할 필요가 없는 유틸리티 클래스 정의

 

나는 이런 이유로, BaseBallGame 클래스의 isRunning 변수에서 static을 제거했다.

public class BaseBallGame {    
	private boolean isRunning;
	...
}

이때 static 변수를 제거하면, 해당 필드를 사용하고 있는 static 함수에서 a non static member reference must be relative to a specific object 이라는 오류가 나온다.

이 오류가 발생하는 이유는 static 변수가 제거된, non-static은 클래스가 로딩되고, new를 통해서 클래스 객체가 만들어졌을 때 생성된다.

static 변수에서, 만들어지지도 않은 객체 변수를 사용할 수는 없기 때문에 이런 오류가 발생하는 것이다.

 

Reference

 

객체지향 생활체조 규칙8: 일급 컬렉션(First Class Collection) 사용

일급 컬렉션 (First Class Collection)의 소개와 써야할 이유

 

일급 컬렉션 (First Class Collection)의 소개와 써야할 이유

최근 클린코드 & TDD 강의의 리뷰어로 참가하면서 많은 분들이 공통적으로 어려워 하는 개념 한가지를 발견하게 되었습니다. 바로 일급 컬렉션인데요. 왜 객체지향적으로, 리팩토링하기 쉬운 코

jojoldu.tistory.com

일급 컬렉션은 코드를 Wrapping하여, 다른 멤버 변수가 없는 상태를 말한다.

나도 이번에 숫자 야구에서 야구공 번호와 야구공 묶음 클래스를 각각 Integer 변수를 Wrapping하고, List를 Wrapping하여 일급 컬렉션으로 관리하였다.

다만 비교 결과를 관리하는 result Map은 그대로 노출하였는데, 다음번에는 일급 컬렉션을 사용하여 관리해야겠다.

 

변수명 정하기는 So hard!!!

변수명 정하는 것은 아직 어렵다… 그래도 이번 과제와 코드 리뷰를 통해서 얻은 점은 다음과 같다.

  • 메서드명은 동사로, 클래스명은 명사로!
    • 클래스명: LineSplitter, 메서드명: splitLine
  • boolean 변수에 is, has, can, should, use 잘 사용하기
  • 메서드명과 메서드의 변수, 파라미터에 같은 이름 중복 사용하지 않기
  • 각 언어의 명명 규칙을 잘 지키기(자바의 경우 카멜케이스를 따른다.)
    • class: 대문자로 시작하고, 명사 사용
      ex) class Thread, class Raster
    • interface: 대문자로 시작하고, 형용사 사용
      ex) interface Runnable, interface Storing
    • method: 소문자로 시작하고, 동사 사용
      ex) add(), runFast()
    • variable: 소문자로 시작
      ex) int i, char c, String phoneNumber
    • Package: 소문자로 시작
      ex) com.sun.eng
    • constant: 대문자로 시작
      ex) static final int MAX_WIDTH = 999;

 

미션을 마무리하면서

동료 리뷰

이번에도 역시 적극적인 동료 리뷰가 이루어졌는데, 나도 다른 사람들의 코드를 읽어보면서 리뷰하는 시간을 가졌다.

배운 점과 다음 미션에서 적용해보고 싶은 것들은 다음과 같다.

  • 클래스별로 구현 기능을 정리하는 습관을 가질 것
  • lambda 문법을 익히고 적용하는 것

사람들마다 자바에 대한 숙련도와 구현 방법이 달라서 새로운 것을 알기에 유익했다.

 

다음주차 목표

  • 모든 메서드에 대하여 테스트 코드를 작성하는 습관 갖기
  • 각 객체가 어떤 일을 담당하는지 파악하기 위해, 클래스별로 구현 기능을 정리하는 연습하기
  • lambda 문법 익히고 적용하기
  • 그리고,,, 주어진 요구사항 꼼꼼하게 읽기ㅎㅎ
    마지막에 사이트에서 제출할 때, 인텔리제이에서 확인한 테스트 코드는 모두 통과되는데 제출에서 알 수 없는 이유로 실패했다는 에러 메시지가 나왔다. 주어진 요구사항 대로 구현했다면 분명 실패하지 않았을 것이라는 생각에 다시 요구사항을 읽었고, 다르게 구현한 부분을 찾아 수정했더니 통과했다!🥹 마감시간이 얼마 남지 않아 매우 긴장했던…ㅎㅎ

 

그럼 2주차도 화이팅 :)

반응형