
- Java 개요
- Java 클래스와 메소드 그리고 구성요소
확실히 두 번째 배우는 내용이라 그런지 처음 자바에 대해 배울 때보다 더 이론적으로도 이해가 잘 되는 것 같다. 강사님께서 세세하게 설명을 잘 해주셔서 크게 신경쓰지 않았던 요소들에 대해서도 집중을 더 잘 할 수 있었다.
1차 프로젝트가 끝나고 생긴 시간에 각자 필요한 스터디 모임을 구성하면 좋을 것 같다고 강사님이 얘기해주셨다. 그래서 같이 프로젝트를 했던 팀원 몇 명과 같은 수업을 듣는 한 명과 함께 백준 코딩테스트 스터디를 시작했다. 내가 깃 레포지토리를 생성해서 스터디원들을 초대했는데, 인텔리제이로는 깃허브 연동을 처음 하다보니 오류가 자꾸 발생했다. 알고보니 설정에 깃 실행 path를 잘못 연결해서 발생했던 오류였다. 별 거 아닌 일에 시간을 소요해서 아쉬웠지만 그래도 다음부터는 실수 할 일이 없어서 다행인건가 싶은 생각도 들었다.
우선 이번주에는 class1 문제 36개를 풀기로 했다. 아무래도 개개인의 스케줄이 다르다 보니 모여서 코드리뷰를 하는 시간을 갖는 것에는 협의가 필요하겠지만, 우선은 각자의 공부 진도를 서로 확인하는 것에 의의를 두고 있다. 나는 여지껏 문제를 해결하는 데에만 초점을 두고 있었는데, 다른 분들의 코드를 보니 이왕 공부할 때 좀 더 효율적이고 클린한 코드를 작성할 수 있도록 노력해야겠다는 생각이 들었다.
귀가 시간에 개발관련 이론 서적을 읽으려고 하니 너무 졸려서 아침에 학원에 도착 후 남는 시간(대략 20분 ~ 30분 정도)에 독서하는 것으로 계획을 변경했다. 확실히 지하철에서 읽을 때보다는 집중이 잘 되는 것 같다.
Java 강의 한 파트가 마무리 될 때마다 강사님이 실습문제를 내주셨다. 주어진 시간 내에 푸는 것에는 크게 어려움이 없었다. 다만, 실제 업무를 할 때처럼 기능별로 메소드를 나눠서 코드를 짜는 습관을 들여야 할 것 같다.
Java 문제풀이를 할 때 최대한 그 날 배운 내용을 활용해서 코드를 짜보려고 했다. 어떤 언어든 알고리즘으로 이미 생성되어 있는 클래스의 메소드들도 결국에는 수도코드로 표현 할 수 있어야 한다고 생각한다. 기억에 남는 문제를 예로 들어보겠다.
Scanner sc = new Scanner(System.in);
System.out.print("문자열을 하나 입력하세요 : ");
String str = sc.nextLine();
char[] chArr = str.toCharArray();
System.out.print("검색할 문자를 입력하세요 : ");
char key = sc.next().charAt(0);
int count = 0;
for (char c : chArr) {
if(c == key) {
count ++;
}
}
String[] strArr = str.split("");
int count2 = Collections.frequency(Arrays.asList(strArr), String.valueOf(key));
위처럼 우선은 최대한 논리 표현을 할 수 있는 방법으로 문제를 풀고 이러한 알고리즘 기능을 담당하고 있는 클래스 메소드를 찾아서 한 번 더 풀어보는 것이 훨씬 더 문제를 해결하는 데 도움이 되는 것 같다.
물론 문제를 풀다보면 분명 귀찮아져서 문제 해결을 위한 클래스 메소드들을 바로 적용해서 풀고 싶어질 때가 올 것이 분명하다. 하지만 그렇게 풀었던 문제들일지라도 다시 한 번 수도코드로 해결해봐야겠다. 클래스 메소드를 사용하면 코드량이 줄어들어서 보기에도 편하고 유지보수할 때도 좀 더 편하기는 하겠지만, 항상 성능이 더 좋은 것도 아니고 지금은 공부하는 단계이니 빠른 문제 해결보다는 원리를 이해하는 것에 초점을 맞추는 것이 나에게 더 도움이 될 것 같다.
귀찮은 일을 해내야 행복할 수 있다. 😆
오.. 귀찮은일을 해내시는 것을 보니! 행복하실것 같네요 !! ㅋ