공부일지

1. 스스로 코딩하기 - JAVA 첫 강의 이후

young313 2022. 7. 14. 22:24

2021.4.23 업로드 재업

 

JAVA (이후 자바라고 하겠다.) 기본 강의를 듣고 다음 강의를 바로 이어 듣는 것 대신 배운 내용만을 가지고 스스로 코딩을 해봤다. 스스로 코딩을 해보다가 너무 하고싶다! 잘 모르겠다! 이 부분을 배우고 싶다! 하는 생각이 들었을 때 다음 강의를 다시 시작해야지 하는 생각으로 말이다. 지금은 이 단계를 넘었고 다음 강의를 듣고 있다. 내가 스스로 코딩해보고 부딪혔던 부분을 정리해보려 한다.

 

 


 

 

일단 기본 강의에서 배웠던 개념들을 나열해보자면 자바에 대한 기본 개념, 데이터 타입, 변수, 클래스, 인스턴스, 배역, 기본 조건문, 반복문, 메소드 등이 있다. 이렇게 적으면 아주 많은 것을 배운 기분이 들지만 해당 개념들에 대해 정말 "배우기"만 했을 뿐 실제로 잘 사용했다고는 말할 수 없을 것 같다. 사실 약 50강의 강의를 듣고 생각보다 할 수 있는 것이 많이 없어서 다음 강의를 듣고 실력을 키우고 싶었다. 아직 체화도 되지 않은 상태에서 말이다. 만약 중간에 멈추지 않고 진도만을 계속 나갔다면 앞에 배운 내용마저 까먹고 이도저도 안되는 상황이 되었을 것이다. 과도한 욕심을 버리고 약 2주간 스스로 자바를 써봤는데 신기한 일들이 일어났다. 스스로 문제를 해결하고 구글링하면서 깨달음을 얻을 수 있었다.

 

 


 

 

첫번째는 "*" 별 모양으로 이루어진 트리를 만들어보는 것이었다. 예전에 들었던 다른 강의에서 예제로 나왔던 것이 생각이나서 구현해보았다. 이과정에서는 반복문 개념을 사용했는데 { } 중괄호의 위치에 따라 결과가 달라지는 것을 몸소 확인했고..(괄호의 위치를 잘못 넣어서 *모양으로 이루어진 트리 자체를 무한 반복시키는 명령으로 잘못 입력하기도 했다. 그래서 컴퓨터에서 멈추지않고 트리를 만들어내는 바람에 몇시간을 헤맸었다..) 줄바꿈 역슬래쉬+n 을 사용해서 제법 모양이 갖추어진 결과를 도출했다.

두번째는 조건문을 사용한 연습이었다. 사실 너무 단순하다고 생각해서 스스로 코딩을 시작하고 거의 바로 해봤던 연습이었는데 원하는 대로 결과가 나오지 않아서 자괴감에 빠졌던 기억이 있다. "args[0]"를 이용해서 "young"라는 입력값을 넣으면 "genius"가 나오게끔 코드를 짰다. 완벽하다고 생각하고 실행했는데 아무리 손을 대봐도 "stupid"가 도출되었다. 대체 뭐가 문제인지 이해가 가질 않았다. 배운대로 했고 틀림없이 되어야 하는데 원하는 결과가 나오지 않으니 스트레스도 받았다. 결국 구글링을 통해서 "=="대신 "equals"를 사용해야 한다는 것을 찾기는 했지만 뭐가 다른 것인지 이해가 안되니 받아들여지지 않았다. 결국 기존에 "args[0]"를 이용해서 입력값을 넣는 방법 대신 직접 코드를 바꾸는 방법으로 원하는 결과를 도출시키기로 했다. 그 결과가 아래의 사진이다. 이 문제는 얼마 전 해결되었다. 글 시작 부분에 언급했듯 현재 새로운 다음 강의를 듣기 시작했는데 강의 목록을 들어가보니 " '=='와 'equals'의 차이"라는 강의 제목이 있는 것이었다!! 너무 반갑기도 했고 너무 궁금해서 그 강의 순서가 될때 까지 앉은 자리에서 강의를 모두 들었다 ㅋㅋㅋㅋㅋ 이는 자바 비교 연산자의 특징이었고 primitive 데이터 타입일 경우 "=="를, not primitive 일 경우 "equals"를 쓴다는 것을 알았고 드디어 문제를 해결했다.

"args[0]"와 "=="로 값이 나오지 않아서 다른 방법으로 도출해낸 화면

 

 

관련 강의를 듣고 다시 작성한 코드 (args[0]=young)

 

세번째는 배열을 사용해서 연습해봤다. 이쯤부터 복잡한 예시를 만들어보고 싶다는 생각이 들었던 것 같다. 나름 많은 계산이 필요한 예시를 만들고 마지막 "save"된 금액을 비율에 따라 배분하는 식을 작성했다. "while( i < payrate.length)~~" 까지 작성하고 결과를 확인했는데 궁금증이 생겼다. 4개까지 payrate를 작성해두었는데 다 쓰고 싶지 않으면 방법이 없을까?하는 의문이 들어 그 뒤에 -2, -1 등을 붙여보았다. 신기하게도 결과가 원하는 대로 나왔다. 이때 내가 착각한 것이 있었는데 (이후에 이런 개념도 있을지 아직은 모르겠다) "while( i < payrate.length)" 부분에 +1,+2를 추가하면 작성한 payrate이 순환한다고 생각했던 것이다. 그러니까 "while( i < payrate.length) +1 )"을 하면 다시 payrate[0]으로 돌아가서 0.4가 곱해진다고 생각했다. 다음과 같이 작성하니 에러코드가 떴고 '아 순환이 아니라 작성된 배열을 따르는 것이지!'하는 생각이 들어 꺠달음을 얻었다.

 

 

마지막은 인스턴스다. 강의를 들을 당시 정말 이해가 안됐다. 대체 무슨 말인지 모르겠고 약간의 좌절감을 느꼈던 파트가 인스턴스였다. 하지만 혼자 계속 이것저것 만져보고 분류하고 클래스를 만들고 인스턴스를 추가해보니 약간은 감이 잡혔다. 메소드를 모아서 정리한 것이 클래스, 그래서 시작부분에 class를 선언하고 메소드들을 모아둔 것이다. 그리고 아래 클래스를 복제해서 클래스 안의 메소드를 그대로 가져가고, 변수 바꾸어 사용하는 인스턴스를 작성했다. 아직 설명을 잘 할 수 있는 단계는 아니지만 일단 어느정도 스스로 이해할 정도의 수준을 되었다고 생각한다. 이후 강의를 더 듣고 인스턴스에 대한 나만의 개념을 정확하게 만들어내고 싶다.

 

 

 


 

 

2주 정도의 시간동안 10개 가량의 프로젝트를 만들어 실습해봤는데 지나고보니 너무나 단순해보이지만 실제로 하나에 몇 시간을 투자한 것 같다. 어쨌든 막무가내로 진도를 나가지 않고 잠시 멈추어서 복습한 결과 다음 강의를 지금 더 쉽게 듣고 있다. 아직은 초초초보라고 생각한다. ㅋㅋㅋㅋ 스스로도 놀랄만 한 멋진 결과물을 만들 수 있을 때까지 열심히 노력해보겠다!!