코딩테스트 문제를 인텔리제이(IDE)로 옮기면서 자바 Java 기초에 더 익숙해지기
[코딩테스트는 어렵다. but…]
“입사할 때 코딩테스트를 보는 회사들이 꽤 많으니까 코딩테스트는 잘 준비해라.
하지만 회사에서는 코딩테스트가 실무에 도움되는 경우는 별로 없다.”
이런 얘기들을 현직 개발자분들에게 여러 번 들었다.
그렇다면 코딩테스트 준비과정이 개발에 도움이 되려면 어떻게 준비하면 될까…
라고 생각해 본 적이 사실 없었음.
그런데 코딩테스트를 통해 자바 기초에 더 익숙해지는 방법이 있어 소개하고자 함. 비전공자, 코딩을 시작한 지 얼마 안 된 분들에게 도움될 것이라 생각함.
자바로 코딩테스트를 준비하는 중이므로 자바로 소개하겠음.
1. 코딩테스트 준비는 다른 사람들의 코드를 쉽게 확인할 수 있는 플랫폼에서 시작한다.
백준도 있고 LeetCode도 있지만 별다른 이유없이 프로그래머스로 코딩테스트를 준비 중. (어떤 곳이든 다른 사람들의 코드를 쉽게 확인할 수 있는 플랫폼이면 괜찮다.)
2. 작성된 코드를 저장할 폴더를 만들고, 인텔리제이(Intelli J)와 연결한다.
사실 IDE는 인텔리제이이든, VScode 등 뭘로 해도 큰 상관은 없다. 노트북에 코딩테스트를 위한 폴더를 만들고 -> 해당 폴더를 인텔리제이로 오픈한다.
프로그래머스 자바 0단계라서 폴더이름은 ‘prgmm0’ 으로 정했다.
3. 풀었던 테스트의 코드들을 내 PC로 복사해 온다.
이미 12개의 코딩테스트 문제를 복사했기 때문에 ‘Prgm013’으로 자바 클래스를 생성한다.
프로그래머스 문제 내용을 모두 옮겨오기엔 내용이 너무 길어서, 문제의 이름과 문제가 출제된 URL을 적어준다. 프로그래머스 자바 0단계-문자열 뒤집기로 예를 들어보겠다.
프로그래머스에서 코드실행 및 제출해서 내가 풀었던 코드(왼쪽)를 인텔리제이로 복사해온다.(오른쪽) 전체를 복사하는 것이 아니라 클래스의 구현부만 복사해온다.
4. 클래스 내부에 public static void main 선언부를 자동 작성
내가(& 다른 사람이) 짠 코드를 실행하기 위해 public static void main 을 작성한다. (프로그래머스와 같은 코딩테스트 플랫폼은 main 이 없어도 코드에 에러가 없는지 확인이 되지만 인텔리제이같은 IDE는 그렇지 않으니까)
인텔리제이에서는 ‘psvm’만 쳐도 그 아래에 main 메서드 자동작성을 제안(?)해 준다. 그래서 enter를 치면
public static void main 메서드의 선언부가 자동으로 작성되었고 이제 구현부만 채우면 된다.
5. public static void main 구현부 작성
문제의 조건들을 대입하고 원하는 결과가 나오는지 콘솔창에서 확인하기 위해 System.out.println을 main 메서드의 구현부에 작성한다. 이 때 ‘sout’만 쳐도 여러 개의 자동완성 제안이 뜨는데 그 중 가장 위쪽에 있는 sout을 선택한다. 이제 System.out.println 를 통해 무엇을 출력할지 작성하면 된다.
이 코딩테스트는 주어진 문자열(String)의 순서를 뒤집어서 다시 문자열로 출력하는 것. 따라서 System.out.println 가 출력할 내용을 위와 같이 작성한다.
그런데…
main 구현부 안의 solution에 빨간색 밑줄이 보인다. 이는 에러가 있다는 것을 의미함. solution에 커서를 올리면 -> 드롭다운이 있는 빨간색 전구가 보일 것이다. (오렌지색 점선 부분) -> 빨간 전구를 클릭하면 2개의 선택지가 있는데 그 중 solution을 static으로 변경하는 것을 클릭한다.
이제 solution 메서드에는 static이 붙고, main 메서드 안의 solution에는 에러 표시가 사라졌다.
6. 실행 및 콘솔창 확인
문자열 “abcde”를 입력하면 거꾸로 “edcba”로 결과가 나와야 문제를 제대로 푼 것이다.
실행 버튼을 클릭해서 Run을 클릭하면
콘솔창에 예상한 결과인 “edcba”가 출력되었다. Process finished with exit code 0 이 출력된 것은 프로그램이 잘 실행되었다는 뜻이다. (0이 아닌 다른 숫자는 에러가 있다고 보면 된다)
이런 식으로 코딩테스트를 인텔리제이와 같은 IDE에 옮겨 놓으면 그것만으로도 개발 공부에 약간은 도움이 된다. 그런데 하나 더 배울 게 있다.
“solution 메서드에 static을 붙이지 않고 실행하면 어떤 결과가 나왔을까?”
빨간 물결선이 보이는데도 그냥 실행했더니 역시 에러가 생겼다. 그런데 에러메시지를 살펴보면
java: non-static method solution(java.lang.String) cannot be referenced from a static context
구글 검색하면 에러가 난 원인을 쉽게 찾을 수 있다. static 메서드(main) 안에서 non-static 변수를 사용해서 생긴 에러인 것이다.
에러를 해결하기 위해 (solution메서드를 static으로 만들지 않고) main 을 non-static으로 만드는 선택지를 클릭했다. 그러면 static이 빠지면서 public void main으로 바뀌고, 전체 코드에는 빨간 물결선이 보이지 않아 에러가 없다고 생각했지만
실행하면 에러가 뜬다. 친절하게도 무엇이 잘못되었는지 알려준다. main 메서드에서 static을 빼지 말라는 것. 실제 main 메서드에 대해 구글링하면 main은 반드시 “public static void main”이 되어야 한다는 걸 쉽게 알 수 있다.
static 메서드는 프로그램이 시작되면서 호출되므로 main은 프로그램 시작과 동시에 호출되는 것이다. 하지만 solution 메서드를 필요한 경우에만 호출하고 싶다면 non-static으로 해야 한다. non-static이어도 에러 없이 실행할 방법이 있을까? 있다.
바로 new를 이용하면 이를 해결할 수 있다. main 안에서 new를 통해 클래스를 객체화하면 되는 것. 그러면 에러 없이 실행된다.
이 문제를 처음 풀었을 때, static의 개념을 잘 몰랐다. 그런데 인텔리제이로 이걸 옮기면서 이런 저런 에러가 생겼고 이를 해결하면서 static 이해도가 높아지게 되었음. 이런 식으로 코딩테스트를 학습하면서 자바의 기본기를 익히는 데 도움이 된 것임.
그런데 이게 끝이 아니다. 이렇게 작성된 java파일에 다른 사람들의 코드까지 넣으면서 더 배울 부분들이 생기게 되었다. 그 경험은 다음 포스팅에서 얘기해보도록 하겠음.
댓글남기기