오늘부터는 스프링입문을 위한 자바 심화 프로그래밍에 대한 공부를 시작한다. 심화라고 하면 말은 거창하지만 사실 자바가 어떤식으로 구동하는가 에대한 이야기인것 같다. 

 사실 나는 일찍이 자바의 구동방식(JVM상에서 바이트 코드를 활용하여 어느 OS든 대응이 가능한 방식)에 대해서 약간 알고 있었지만, 자세히는 모르는 상태라서 아쉽다고 생각은 했었는데, 이번 기회에 우연희 튜터님의 강의를 통해서 자바의 구조에 더욱 잘 알게 되었다. 오늘 강의에서 특히 다양한 개념들이 나왔는데, 실행 엔진 부분에서 특히 많이 들어왔던(C#의 개념에서부터 익숙한) 가비지 컬렉터라던지, 메모리 영역의 힙, 스택영역에 대한 구분이라던지 개념정도는 알고 있었지만 실제로 어떤식으로 구동하는지 자세하게 알지는 못했던 것들을 알수 있었다.

 이제부터는 꾸준히 CS에 대한지식, 자바의 구동에 대한 지식을 슥듭 하는 것이 관건 일것이다. 그것이 자바의 초급자와 중급자를 나누는 기준이 될 것 이라 생각한다.

 내일배움캠프가 드디어 한달째 되는 날이다. 지난주부터 이어온 자바 미니 프로그램의 발표가 있는 날이기도 하다. 오전 시간에는 어제 준비한 발표자료와 미니프로젝트를 최종 점검했다. 원하는 동작에 대해서 크게 변경된 점은 없었지만, 의도하지 않은 동작들을 처리하는 것을 생각을 했고, 그것을 수정했다.

 점심 식사를 하고 난 후 오후에 발표를 시작하게 되었는데, 우리조는 일찍 발표를 하게 되었다. 나름 준비를 했다고 했지만 생각보다 잘 진행되지 않은거 같아 아쉬웠고, 다른팀에 비해서 발표 자료가 적어서 많이 아쉬웠다. 미니프로젝트를 하면서 나름 많은 기술들을 사용했는데 그것들을 발표를 통해서 말하지 못한점이 아쉬웠던것 같다.

 그렇게 오후에 발표시간이 지나간후에, 팀별로 튜터님들께 서면 피드백을 받았는데, 나름 좋은 평가를 받아서 다행이라고 생각한다. 이번 프로젝트는 나 스스로가 많은 것을 느낄 수 있었고, 긍정적인 방향으로 피드백을 받을 수 있어서 좋은 상황이었던 것 같다. 

 이번 미니프로젝트를 마무리하는 단계가 왔다. 이번 프로젝트를 진행하면서 여러가지 깨달은게 많았다. 특히,  자바의 클래스를 사용하는 것에대해 익숙해진것이 가장 큰 수확이라고 생각한다. 

 미니프로젝트를 정리하면서 생각보다 여러가지 기능을 많이 사용했구나 느꼈다. 싱글턴 패턴, enum 타입 사용, java의 file 클래스 api, stream 버퍼 클래스의 사용 등 사용해보면서 능숙하게 사용된다는 느낌이 많이 들었다.

 내일이면 발표다. 어느정도 잘 준비해서 발표를 잘 마무리할 수 있었으면 좋겠다.

 벌써 내일배움캠프를 시작한지도 1달이되었다. 내 나름대로 이번주간은 자바에 대해서 여러가지로 익힐수 있었던 주간이었다. 특히 java에서는 camelcase가 기본적으로 사용된다 라던지, 항상 변수를 사용할때 명시할 수 있는 것이 있다면 명시해야한다라는 것들 혼자서 프로그래밍하면서 알수 없었던 규칙들을 알 수 있었다. 이런것들이 내가 계속해서 성장해갈수 있는 것들이라고 생각한다. 

 이번에 두가지 미니프로젝트를 진행하면서 자바에 대해서 여러가지로 익숙해진것 같다.

 첫 미니 프로젝트였던 메모장 프로그램을 만드는 프로젝트를 통해서 자바에서 사용하는 기본적인 문법체계를 많이 사용할 수 있었던 것같다. 

 두번째 미니 프로젝트인 은행 관리 프로그램을 만들면서 클래스의 책임을 어떻게 나눌지 고민을 많이했던 것 같다. 특히, 프로그램의 UI를 관리해줄 클래스를 분리했고, 각각의 기능을 수행해줄 클래스에게 기능들을 위임을 해, 계속해서 재사용 할 수 있도록 했던것이 주요했던 것 같다. 최소 기능 단위로 나눈다는 느낌을 알 수 있던 과정이었다.

 앞으로 남은 프로젝트 기간동안 조금더 코드를 세분화 할 수 있도록 생각을 해봐야겠다.

 오전에 어제 진행했던 메모장 프로젝트를 토대로, 오전시간에 피드백을 받았다. 일단 오준호 튜터님의 피드백을 받았는데, 처음에 진행했던 프로젝트의 내용에서 간간히 로직상에 등장하는 -1 이라는 무엇을 의미하는지 알아보기 힘들다고 피드백을 주셨고, 그것에 대해서 명시적으로 표현하는 것이 좋다라는 피드백을 주셨다. 나는 처음에 OutOfIndex의 상황에 대응하기 위해서, 해당 상황에 도달하게 되면, 새로운 객체를 생성하고, 그 객체의 값을 -1로 집어넣어주어 이것이 OutOfIndex라는 상황이라는 것을 알려주기위해서 코드를 작성했는데, 의미를 알고 있는 내가 봤을때는 이해가 되지만, 다른사람의 경우에는 이해하기 어려울 것이라는 것이 공감되었다. 그렇기 때문에, 유익한 피드백이 되었던 것같다.

 또한, 클래스의 구조에 대해서 이야기를 들었는데, 튜터님께서, 어떻게 해서 이런의도로 작성했냐는 물음에 대답하기 어려웠던 것들이 있었는데 그것들에 대해서 다시한번 생각해볼수 있었던 것 같았다. 

 이제부터 본격적으로 하는 프로젝트를 진행할 때, 받았던 피드백을 생각하면서 작업을 해야겠다. 오후에는 2번째 프로젝트를 진행하기 위해서 팀원들과 함께 우리가 무엇을 진행해야할지 고민을 하기로 했다. 일단은 기본적인 클래스의 설계를 마치고, 서로 업무를 배분하기 위해서 고민을 했다. 

 이번 프로젝트도 잘 진행되었으면 좋겠다.

 오늘부터 배운 자바를 활용한 미니프로젝트를 시작한다. 주어진 과제는 메모장 만들기인데, 처음에 어떤식으로 만들어야 할지 고민했었고, 어제 튜터님께서 강의한 내용중에 콘솔창을 이용해서 메모장을 만든것이 생각났고, 그 방식을 이용해서 프로그램을 작성하기로 하였다. 

 일단 팀원 모두와 함께 프로그램을 어떻게 진행할지 고민했다. 먼저, 프로그램의 전체 구조를 살펴 봤는데, 주어진 조건에 따라서 흐름을 작성하면 다음과 같은 내용이 된다.

 이제부터 이런 다이어그램을 통해서 구현을 시작하기위해서 두가지 클래스가 필요하다. 하나는 메모클래스와 하나는 메모리스트 클래스이다. 일단 메모 클래스는 메모장의 기능들을 부여하기로 했고, 메모리스트 클래스는 메모데이터를 관리해주는 자료저장을 위한 클래스로 제작하기로 했다. 

 오전 오후동안 미니 프로젝트를 진행했고, 팀원들과 이야기를 나누었는데, 생각보다 프로그래밍을 처음 접하는 사람들이 많았고, 프로젝트를 이해하는데 어려움이 많았다는 것이 느껴졌다. 팀원들과 서로 생각하는 바를 이야기 나누고, 서로 의견을 교환 했었는데 내가 몰랐던 것도 다시 한번더 이해할 수 있는 계기가 되어서 나에게도 좋았던 것 같고, 팀원들은 자신이 제대로 이해하고 있었는지 확인할수 있어서 서로에게 좋았던 시간이였던거 같다. 이런 것을 프로젝트가 거의 끝날 때 기회를 가져서 아쉬웠는데, 앞으로는 이런 기회를 처음부터 만들 노력을 해야겠다. 

 오전에 객체지향프로그래밍 마지막 강의를 들었고, 오후에는 개인적으로 코딩테스트 문제 하나를 풀고, 자바 문법에 대해서 복습하였다. 특히, 프로그래밍 마지막 수업에서는 자바를 통해 객체지향 프로그래밍에 대해 실제로 코드를 작성하는 것을 보았는데, 내가 C#에서 작성하는 코드와 별반 다른것 없다 라는 것을 느꼈다. 이전에 학습했던 내용들이 하나씩 되새김질 하는 느낌이라 좋았던 것 같다.

 오후에는 코드 테스트 문제를 하나 풀었다. 오늘 푼 문제는 우박수열 정적분이다. 내용은 생각보다 간단하다. 그려진 정적분의 닫힌공간을 정적분하는 문제인데, 내 나름 머리를 쓰겠다고 직선함수를 정적분 해야한다는 생각을 오래했는데, 사실 어렵게 할 필요없이, 각각 그려지는 직선의 아래넓이를 구하면 되는 문제였다. 괜히 어렵게 접근해서 시간만 오래 소모한 느낌이였다. 다음부터는 쉽게 접근을 할 생각을 해봐야 겠다.

 나머지 시간동안 내일부터 시작될 미니 프로젝트를 대비해서 자바 문법을 복습했다. 아직도 헷갈리는 몇개의 문법(C#에서 일반적으로 사용하는 모양과 다른)것들이 익숙해질 수 있도록 나름 미니프로젝트를 연습했고, 나름대로 익숙해 진 느낌이다.

 오늘 오전에는 객체지향 강의 3번째인 SOLID 원칙에 대해서 강의를 들었고 오후에는 이번주 수요일부터 시작될 미니프로젝트를 대비에서 자바 문법에 대해서 복습하였다. 오늘은 아쉽게도 코드 테스트를 하지 못했다. 

 일단 오늘 배울 SOLID원칙은 결국 개발 방향 설계와 같은 방법론에 대한 이야기인데, 더 크게 보면, 소프트웨어 개발 방법론인 에자일 개발 방법론의 일부로 볼 수 있다고 생각했다. 즉, 객체 지향 원칙 또한, 소프트웨어를 개발하는 것의 일부 이기 때문에 더 이부분을 공부하기 위해서는 소프트웨어 방법론에 대해 공부하는 것이 좋을것 같다고 생각했다.

 오후에는 이때까지 강의로 들었던 자바 문법을 다시 복습했다. 특히 패키지와 임포트(package, import)의 활용에 대해서 조금더 알아봤다. 이전 까지만 해도, C#에서 사용 할 때는, 임의로 생성한 클래스들을 스크립트에서 활용하기 위해서는 namespace를 활용했는데, 자바는 조금더 구체적으로, 임의로 생성한 package내부에 새로운 클래스를 만드는 식으로 활용한다. 즉, 내가 생성한 클래스가 다른 이름이 같은 클래스와 혼동을 하지 않도록 package를 활용해서 구분한다는 것을 알 수 있었다.

+ Recent posts