우테코 프리코스 1주차

쿠우·2022년 11월 5일
0

우테코프리코스

목록 보기
1/4

자취방 구하고 이사준비 때문에 정신이 없다.. ㅠ

1주차에서 얻은 점

깃 사용(포크하고 로컬에서 클론 만들어서 리퀘스트하기)
클린코드,네이밍에 대한 고민
자바 기본적인 문법과 활용에 대해 다시 깨우치기


고려하려고 하는 점들

네이밍시 중요한 고려사항 / 클린코드 / 객체지향

-네이밍을 할 때 다음과 같은 질문을 통해 이름을 짓는 것이 필요하다.

(이름만으로도 언제 이 메서드를 호출해야 하는지 의미를 파악할 수 있도록 구체적으로 작성하도록 해야 한다.)

왜 존재해야 하는가

무슨 작업을 하는가

어떻게 사용하는가

-메서드 이름은 동사/전치사로 시작한다.

메서드명은 기본적으로는 동사

다른 타입으로 전환하는 메서드나 빌더 패턴을 구현한 클래스의 메서드에는 전치사

★고민 없이 자바빈 규약에 따른 getter, setter는 객체지향적인 코드작성에 가장 큰 적이라고 할 수 있다.★

init

-데이터를 초기화하는 메서드 명에 쓰인다.

is/has/can

-is는 맞는지 틀린지 판단하는 메서드 명에 쓰인다.

-has는 데이터를 가지고 있는지 확인하는 메서드 명에 쓰인다.

-can는 할 수 있는지 없는지 확인하는 메서드 명에 쓰인다.

https://tecoble.techcourse.co.kr/post/2020-04-26-Method-Naming/

https://tecoble.techcourse.co.kr/post/2020-04-24-variable_naming/

클린코드

= 우테코에서 피드백 해준 내용대로 / 네이밍 요약하지 않기 / {} 생략하지 않기 / 들여쓰기는 3번 이상 하지 않기/ 3항연산자 대신 if문 if-else문 대신 if문 등등

객체지향

= 이건 아직 더 찾아보고 공부해야 할 듯 하다. 메소드와 클래스의 분리에 대해 기준을 잡기가 애매하다.


-1번기능요구사항

1부터 시작되는 400

왼쪽은 홀수 오른쪽은 짝수

  1. 임의로 책을 펼친다. (랜덤 메소드)

  2. 왼쪽 페이지번호(홀수)의 각자리 숫자를 모두 더하거나 곱해 가장 큰수

  3. 왼쪽 페이지번호(짝수)의 각자리 숫자를 모두 더하거나 곱해 가장 큰수

  4. 2~3 과정에 가장 큰수를 본인의 점수로 계산

  5. 점수를 비교하여 가장 높은 사람이 게임의 승자가 된다.

  6. 시작면이나 마지막 면이 나오도록 책을 펼치지 않는다 -> 1,2 와 399그리고 400은 나오지않음

펼친 페이지의 리스트/배열 포비가 이기면 1 크롱이 이기면 2 무승부 0 예외 사항 -1

제한사항

pobi와 crong의 길이는 2이다.

pobi와 crong에는 [왼쪽 페이지 번호, 오른쪽 페이지 번호]가 순서대로 들어있다.

https://github.com/koo9b9h/java-onboarding/blob/koo9b9h/src/main/java/onboarding/Problem1.java


-2번 기능요구사항

암호문 해독

cryptogram(암호문)이 매개변수로 주어짐 / 중복문자 삭제 결과를 반복적으로삭제해서 return

"browoanoommnaon"이라는 암호문은

"browoanoommnaon"

"browoannaon"

"browoaaon"

"browoon"

"brown"

  1. 한문장을 순회한다.

  2. 전체적 순회한다.

스트링 버퍼와 스트링 빌드가 메모리에 선점되는 과정에 대해서 생각하게 되었음

기능 분리

  1. 작게 순회하며 지우는 기능 분리(RepectDelete)

  2. 분리한 기능을 반복해서 사용하는 기능 지운 횟수로 통제(solution)

https://github.com/koo9b9h/java-onboarding/blob/koo9b9h/src/main/java/onboarding/Problem2.java


-3번 기능요구사항

(다른 분들 한 것 보니까 더 간단하게 함수와 연산자를 이용한다...)

369 게임

1부터 숫자를 하나씩 대면서 3,6,9의 숫자만큼 손뼉을 쳐야한다.

손뼉친횟수는 저장한다.

기능 분리

  1. 해당 숫자에서 손뼉을 몇번치는지 구분하는 기능 (clapCounting)

  2. 주어진 숫자를 순회하면서 전체적으로 손뼉친 횟수를 반환하는 기능(solution)

(변수명에 대해서 고민한 것 빼고는 크게 어려움 없었던 문제)

https://github.com/koo9b9h/java-onboarding/blob/koo9b9h/src/main/java/onboarding/Problem3.java


-4번기능요구사항

  1. word가 매개변수로 주어질 때 청개구리 사전을 참고해 반대로 변환하여 리턴

대문자는 대문자로 소문자는 소문자로 역순에 위치한 알파벳으로 변환

기능 분리

  1. 알파벳을 한글자씩 재조합해주는 기능 (solution)

  2. 분리되서 들어오는 알파벳을 청개구리 사전으로 변역해주는 기능 (frogTranslate)

https://github.com/koo9b9h/java-onboarding/blob/koo9b9h/src/main/java/onboarding/Problem4.java


-기능요구사항 5번

돈의 액수 money가 매개변수

돈 담을 지갑이 최대한 가볍도록 큰 금액의 화폐 위주로 받는다.

오만 원권, 만 원권, 오천 원권, 천 원권, 오백원 동전, 백원 동전, 오십원 동전, 십원 동전, 일원 동전

금액이 큰 순서대로 리스트/배열에 담아 return

기능분리

  1. 출력 (solution)

  2. 돈 분류하는 부분(categorize)

https://github.com/koo9b9h/java-onboarding/blob/koo9b9h/src/main/java/onboarding/Problem5.java


-기능요구사항 6번

닉네임 중 같은 글자가 연속적으로 포함 될 경우 해당 닉네임 사용을 제한

글자가 연속적으로 포함 되는 닉네임을 작성한 지원자의 이메일 목록을 return

-두 글자 이상의 문자가 연속적으로 순서에 맞추어 포함되어 있는 경우 중복으로 간주

-이메일은 이메일 형식에 부합하며, 전체 길이는 11자 이상 20자

  • result는 이메일에 해당하는 부분의 문자열을 오름차순으로 정렬하고 중복은 제거

기능 분리

  1. ListForms을 map 으로 변환해주는 메소드와 클래스

  2. 2글자 이상 중복이 있는지 없는지 확인해주는 메소드

  3. 중복되는 이름들에 맞는 이메일을 정리해서 출력

어느 기능을 어떻게 분할할지 굉장히 애매했다. 문제 자체가 중복이 있는지 확인하는 문제여서
map으로 변환하는 과정은 무관하고 개별적인 기능이라 생각해 클래스 자체로 분리시켜줬다.
어떻게 기능을 나누고 이를 메소드와 클래스로 나눌것인가 고민해봐야하는 부분

https://github.com/koo9b9h/java-onboarding/blob/koo9b9h/src/main/java/onboarding/Problem6.java


-기능요구사항 7번

사용자와 함께 아는 친구의 수 = 10점

사용자의 타임 라인에 방문한 횟수 = 1점

사용자 아이디 user

친구 관계 정보 friends

사용자 타임 라인 방문 기록 visitors가 매개변수

친구 추천 규칙에 따라 점수가 가장 높은 순으로 정렬 최대 5명을 return

-추천 점수가 0점인 경우 추천하지 않음

-점수가 같은 경우는 이름순정렬

기능 분리

  1. 사용자와의 친구인 리스트를 만드는 기능 (makeFriendList)

  2. 사용자 친구리스트에서 겹치는 친구들에게 10점씩주는 기능 (enterFirendScore)

  3. 방문에 따라 점수 1점을 부여하는 기능 (enterVisitorScore)

  4. 상위 점수 인원 정렬하는 기능(sortUserScore)

메서드와 클래스로의 분류 기준 어떻게해야 더 깨끗하게 보일까 라는 고민을 많이했고 위와 같이 기능을 분리했다. 공통적인 부분인 점수를 부여하는 로직으로 따로 분리할까 했으나 1점과 10점이 명확하게 구분되어있는 것이 보기 더 좋다고 판단함. 또한 정렬할 때 람다식과 Comparable,Comparator 인터페이스에 대해서 한 번 더 생각해보게 되는 문제였다.

https://github.com/koo9b9h/java-onboarding/blob/koo9b9h/src/main/java/onboarding/Problem7.java

profile
일단 흐자

0개의 댓글