2022 Masters Course/CS 10 Course

2022 마스터즈 코스(백엔드) 23일차 회고(2022. 2. 9.) - "페어 프로그래밍"

ikjo 2022. 2. 9. 23:54

해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)

 

수강 회고

오늘 마스터즈 코스 과정은 페어 프로그래밍 시간으로 진행되었다. 페어 프로그래밍은 정해진 클래스 내 수강생과 쌍을 이루고 각자에게 주어진 역할에 맞게 협력하여 주어진 문제를 해결하는 방식의 프로그래밍이다. 이번 과정에서는 한 사람은 내비게이터 역할을 수행하고, 다른 한 사람은 드라이버 역할을 수행하는 식으로 일정 간격으로 번갈아가면서 역할을 수행하는 방식으로 진행되었다.

 

그동안 CS10 과정을 하면서도 소모임원들과 미션 해결을 위한 참고 자료들과 각자 모르는 점들을 공유하되 각자만의 방식대로 문제를 해결하면서 학습을 했었는데, 이는 협력한다는 느낌 보다는 문제 해결을 위한 정보를 공유한다는 점, 즉, "협조"하는데 의의가 있었다. 하지만 이번 페어 프로그래밍 과정은 주어진 미션을 "같이" 풀어야 하고 그 과정에서 각자만의 "역할과 책임"이 있기 때문에 진정으로 "협력"한다는 느낌을 받을 수 있었다.

 

그 과정에서 네비게이터 역할을 할 때가 가장 막막했다. 네비게이터는 조직으로 비유를 하자면 거의 팀의 리더 역할을 수행하는 것과 유사하다. 팀의 리더라면 문제 해결을 함에 있어서 전체적인 숲을 봐야하고 문제 해결의 방향을 정해주는 역할을 수행해야 하는데, 막상 오늘 네비게이터 역할을 해보니 전체적인 그림이나 방향을 제시하기가 상당히 힘들었다. 왜냐하면 나의 경우 문제 해결을 위해서 어느 정도 윤곽은 세우되 실질적인 세부 계획은 직접 프로그래밍을 하면서 상황에 맞게 탄력적으로 세웠었기 때문이었다. 그렇기 때문에 오늘 페어 프로그래밍을 하면서도 사실 네비게이터 역할을 했다기 보다도 함수 하나하나를 구현해 나갈 때 지속적으로 서로의 생각을 맞추고 의견을 조율하면서 팀원과 팀원이 함께 프로그래밍을 한다는 느낌으로 진행을 했었다.

 

오늘 페어 프로그래밍을 하면서 느낀 것은 팀 플레이(협력)에 있어서 가장 중요한 것은 바로 "소통"이라는 생각이 들었다. 즉, 팀원과 대화를 정말 많이 해야한다는 것이었다. 나 혼자서 프로그램을 개발할 때는 내가 주도적으로 개발하고 그러한 데에 따르는 책임 역시 나 혼자 지어야 한다. 하지만 팀원과 같이 하는 프로그래밍이라면 각자의 역할과 책임이 있고 서로의 생각과 의도를 지속적으로 맞춰나가야 한다. 이를 위해 대화가 정말 많이 필요하다는 것을 느낄 수 있었다. 오늘은 두명이서 프로그래밍을 했지만 만약 조직처럼 여러 이해관계자가 포함되 있는 경우라면 각 이해관계자끼리 생각의 합의를 위해 얼마나 많은 대화가 필요할까라는 생각이 들었다. (사실 전 직장에서 근무하면서도 이러한 점은 뼈저리게 느낄 수 있었다.)

 

 

학습 회고

  • 페어 프로그래밍
    • Java 웹 백엔드 클래스 내 소모임원과 zoom 회의실에서 학습

 

오늘 페어 프로그래밍 과정 상 주어진 미션은 프로그래밍 언어별로 내장된 Date 모듈을 활용해서 나만의 캘린더 프로그램을 구현하는 것이었다. 나의 경우 Java를 사용했기 때문에 오늘 미션을 해결하기 위해 Java 내장 클래스 Date와 Calendar를 이용했었다. Date와 Calendar의 경우 프로그래밍을 할 때 자주 사용하는데 매번 사용할 때마다 자료를 일일이 다시 찾아보느라 시간을 많이 할애하게 되어 별도로 정리를 해야 할 필요성을 느꼈다. 오늘 학습했었던 주요 내용은 다음과 같다.

 

String ↔ Date 형변환

자바에서는 String 문자열 타입과 Date 날짜 타입간 형변환이 가능하다. 우선 String을 Date로 형변환하기 위해서는 String 문자열의 값이 SimpleDateFormat 객체에서 정한 패턴(Pattern)에 맞아야 한다.(ex dd/MM/yyyy) 이후 SimpleDateFormat 객체 parse 메서드의 인자로 특정 일자를 나타내는 String 문자열을 두고 실행하면 해당 일자에 맞는 Date 인스턴스를 반환한다.

 

        String sDate="31/12/2022";
        Date date = new SimpleDateFormat("dd/MM/yyyy").parse(sDate);
        System.out.println(sDate + "\t" + date); // Sat Dec 31 00:00:00 KST 2022

 

Date를 String으로 형변환하기 위해서는 우선 나타내고 싶은 일자 패턴을 SimpleDateFormat 객체의 인자로 설정한다. 이후 SimpleDateFormat 객체 format 메서드의 인자로 Date 인스턴스를 두고 실행하면 앞서 설정한 패턴에 맞는 날짜 값의 문자열이 반환된다.

 

        String dateToStr = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date());
        System.out.println(dateToStr); // 09/02/2022 23:43:53

 

SimpleDateFormat에 대한 일자 패턴은 다음 자바 공식 문서 사이트에서 참고해볼 수 있다.

 

 

SimpleDateFormat (Java Platform SE 7 )

Parses text from a string to produce a Date. The method attempts to parse text starting at the index given by pos. If parsing succeeds, then the index of pos is updated to the index after the last character used (parsing does not necessarily use all charac

docs.oracle.com

 

Calendar을 이용한 년, 월, 일 등 날짜 요소 추출하기

Date의 인스턴스를 생성하면 년, 월, 일 등으로 이루어진 현재 날짜를 구할 수 있다. 하지만 프로그래밍을 하다보면 년, 월, 일 등 날짜 요소를 건건이 추출해야할 때가 생긴다. 이때는 Calendar 클래스를 이용하면 된다. 우선 Calendar의 인스턴스를 생성해주는데 이때 인자로 TimeZone을 두면 특정 나라의 날짜를 구할 수 있다. 이후 앞서 생성한 Calendar 인스턴스의 setTime 메서드 인자로 Date 인스턴스를 두고 실행하면 Calendar 인스턴스의 get 메서드를 통해 년, 월, 일 등의 날짜 요소를 추출할 수 있게 된다.

 

        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Asia/Seoul"));
        cal.setTime(new Date());

        System.out.println(cal.get(Calendar.YEAR)); // 2022
        System.out.println(cal.get(Calendar.MONTH) + 1); // 2
        System.out.println(cal.get(Calendar.DAY_OF_MONTH)); // 9
        System.out.println(cal.get(Calendar.HOUR_OF_DAY)); // 23
        System.out.println(cal.get(Calendar.MINUTE)); // 51
        System.out.println(cal.get(Calendar.SECOND)); // 21

 

 

좋았던 점

  • 오늘 페어 프로그래밍이 처음이라 다소 미숙했었지만 팀원과 함께 재밌게 프로그래밍을 할 수 있었고 그 과정에서 "협력하는 방법"에 대해서 생각해볼 수 있었던 점이 큰 수확이었습니다.

 

 

아쉬웠던 점

  • 설연휴 이전에는 설연휴를 통해 에너지가 충전될 수 있을 거라 생각했었지만 막상 설연휴가 지나고 이번 한주를 보내 보니 이전 보다 더 피로한 느낌을 받았다...💦 지속적으로 원활한 학습을 위해 컨디션 관리를 잘 해야겠다는 생각이 들었습니다.