지원
내년엔 꼭 부트캠프를 해보고 싶은 마음이 있다. 다양한 사람들을 만나보고도 싶고, 구현해보고 싶은 서버 툴을 어떻게 짜야할지 감도 안 오는 수준에서 벗어나고 싶은 갈망이 컸다. 그래서 제일 먼저 모집하는 우테코를 지원해보기로 했고, 합격하지 않더라도 프리코스에서 많이 얻어갈 수 있다는 말에 솔깃해 지원하게 되었다.
10월 26일 (수) ~ 11월 22일(화)까지 4주간 일주일에 한 개씩 과제를 제출해야 하고, 제출했던 과제를 기반으로 12월 17일(토)에 코딩테스트 후 합격자를 발표한다.
1주차 과제
이번 우테코 1주차 과제에서 요구하는 것은 그리 어렵진 않았으나, 양이 조금 많다. 아무래도 양 때문에 시간을 갈아넣는 희생은 감수해야 하는 것 같다. 알고리즘 문제 7문제를 풀고, 이 문제들을 테스트케이스에 넣을 때 모두 맞아야 한다. (백준 알고리즘 푸는 느낌이 물씬..)
컨벤션
1. 함수 네이밍 컨벤션
기본적으로 get, set, is/has/can 등 동사+목적어로 짠다. 다음 예시 참고.
무언가를 추가할 때 addElement()
어떤 Index를 삭제할 때 removeElementAtIndex()
검증할 때 isValid()
가장 큰 값을 가져올 때 getMax()
boolean값을 가져올 때 isNumber()
주문할 수 있는지 없는지 canOrder()
어떤 Board를 만든 후 Return해주는 메서드 create()
데이터를 찾을 때 findElement()
Int로 변환할 때 toInt()
번호로 이름을 가져올 때 getNameByNumber()
2. GIT 컨벤션
Feat - 새로운 기능 추가
Docs - 문서 수정
Style - 코드 포맷팅, 세미콜론 누락, 코드 변경 없는 경우
test - 테스트 코드
Fix - 기존 기능 문제가 있어서 문제를 해결한 것
Add - 비즈니스 요구사항을 추가한 것
Update - 기존 기능에 기능을 변경한 것
Refact - 리펙토링. 즉, 코드를 깔끔히 정리한 것. 기능은 그대로다.
요즘엔 이모지로도 깃 commit한다고 한다. 너무 귀엽다..// 깃 이모지 쓰는 방법은 여기.
아래처럼 무엇을 했는지에 대한 내용을 쓰면된다. 최대한 현재형으로 쓰고, 해당 issue를 같이 명시하면 좋다.
양식을 사용해서 정리하기도 한다.
type : subject (위의 내용처럼 작성. 간결하게 작성이 핵심이다.)
body (왜, 무엇을 에 초점을 두어 자세하게 작성한다.)
footer (optional. 주로 github에서 관련있던 issue번호를 적는다.)
과제정리
자세한 과제풀이 코드는 해당 깃허브링크 에서 확인할 수 있다.
JAVA 프레임워크 공부한 내용들
가시화하기 좋은 solid와 reduce
JAVA에서 가장 많이 사용되는 기능 중 하나는 Collection으로, array, list, arraylist 등 배열을 만들고 처리할 수 있는 기능이다. 아래 코드와 같이 복잡한 코드를 한 줄에 가시화할 수 있어 편리하다.
import java.util.*;
//문자열 stream 구현
public class GuGu {
public static void main(String[] args){
String[] strArr = {"aaa", "bbb", "ccc","a","c"};
List<String> strList = Arrays.asList(strArr);
Stream<String> strStream1 = strList.stream();
strStream1.sorted().forEach(System.out::println);
}
}
/*
출력
a
aaa
bbb
c
ccc
*/
import java.util.*;
//숫자형 stream 구현
public class DataType {
public static void main(String[] args) {
List<Integer>numberList=Arrays.asList(1,2,3,4,5,6);
int MUL=numberList.stream().reduce(1,(a,b)->a*b);
System.out.println(MUL);
}
}
//출력 720
아스키코드 값을 활용해 100을 1,0,0으로 쪼개기
int형인 100을 str으로 변환한 후 String의 값 하나하나에서 '0'값을 빼는 방법을 이용한다.
import java.util.*;
public class DataType {
public static void main(String[] args) {
String oldList = Integer.toString(100);
ArrayList<Integer> newList = new ArrayList<>();
for (int i = 0; i < oldList.length(); i++) {
//아스키코드 '0'이 45임을 이용한다.
newList.add(oldList.charAt(i) - '0');
}
System.out.println(newList); //출력 [1,0,0]
}
}
map을 이용할 때 1.value값으로 오름차순 정렬한 후 2.key값으로 오름차순 정렬하고 싶을 때
일단 Treemap을 생성한다. 이는 key값을 할당해줄 때 자동으로 오름차순으로 정렬해준다.
이후 List로 keySet을 생성하여 이 Treemap의 값들은 그대로 넣어준다. 이후 List를 sort할 때에는 class형식으로 comparator를 생성하여 문자열을 정렬할 수 있다.
import java.util.*;
public class DataType {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
map.put("a",50);
map.put("aaa",50);
map.put("bb",1100);
map.put("c", 1);
List<String> keySet = new ArrayList<>(map.keySet());
keySet.sort(new Comparator<String>() {
public int compare(String o1, String o2){
return map.get(o2).compareTo(map.get(o1));
}
});
System.out.println(keySet);
}
}
//출력 [bb, a, aaa, c]
comparator과 관련하여 java platform을 보면 다음과 같이 parameters를 지정하고 둘을 빼어 양수/음수/0을 이용해 무엇이 더 큰지 비교할 수 있다. x.compareTo(y)도 x-y와 같은 결과값을 도출한다.
회고
이번 과제는 서버에 쓰이는 언어와는 조금 거리가 있는 듯했지만, 그래도 Java 언어를 체화할 수 있는 기회가 된 것 같다. 아무래도 Python에 항상 익숙해져 있었는데, Java는 C++과 비슷하다 보니 잠재되어 있던 C++ 실력을 꺼내느라 많이 애를 먹었다. 그래도 나중에는 Java로 @오버로딩도 써보고, Class 종속도 고려한 코드를 짜보고 싶다.
Slack에서 소통할 수 있는 공간이 있다. 사람들이 정말 많은데, 다들 스스럼없이 질문하고, 또 최선을 다해 대답한다. 나도 많이 배웠고, 역시 사람들이 함께 힘을 합하면 더 좋은 아이디어와 정보들을 얻게 되는 걸 새삼 느꼈다.
'BackEnd > JAVA\SPRING' 카테고리의 다른 글
[Spring] Spring으로 JWT 구현하기2 - Spring Security 라이브러리 (0) | 2023.02.11 |
---|---|
[SPRING] Swagger, 프론트와의 소통을 편하게 하는 자동 툴 (2) | 2023.02.11 |
[SPRING] Spring으로 JWT 구현하기1 - jwt-java 라이브러리 (2) | 2023.02.09 |
[SPRING] SPRING 기초, SPRINGBOOT 프로젝트 폴더 구조 (0) | 2023.01.15 |
[JAVA] 우테코 2주차 과제 - 숫자 야구 게임 (0) | 2022.11.08 |