안녕하세요 펍 선배님들
답답한 마음에 질문 글 하나 올립니다.
현재 안드로이드를 공부한지 1년 반 정도 되었는데요..
대학생활을 똥같이 해서 기본기가 많이 부족한 상태에서
책을 보면서 이리저리 안드로이드를 파기 시작했습니다.
아직 마켓에 올릴만한 앱은 만들지 못했지만(조만간 하나 올릴예정이에요.. 에버노트 관련 유틸리티임돠.. ㅎㅎ;;)
기본기는 이제 막 마칠정도 수준은 되었다고 생각합니다.. (SDK 영역에서 구글링 하면서 깨작거려요.. )
공부하면서 프로젝트를 3개정도 했었는데 그 3개를 리뷰하면서 리팩토링 하려고 할때마다 참 난감한 상황이더군요..
코드를 보면 전역변수와 스태틱에 의존하고.. 객체 지향이란것도 의미만 대충 알지 코드에 전혀 묻어 나오지 않는것
같습니다.. ㅠㅠ
요구사항이 늘거나 코드를 수정하게 될때 매번 코드 갈이를 합니다.. ㅠㅠ
잘짜여진 코드는 전체리빌딩 없이 유지,보수에 용이하게 만들어진 코드라고 하는데요..
소프트웨어 설계에 대해 어떻게 공부를 해야 할지 모르겠습니다..
하아.. 점점 공부를 할수록 NDK,OpenGl,Open CV,PHP,HTML,CSS 할건 많아지는데..
어찌해야 될까요..
다른 사람의 코드를 많이 보고 배우는게 중요합니다.
그래서 좋은 사수와 같이 일하는게 도움이 많이 되죠^^;
온라인에 있는 공개 소스 프로젝트에 참여하거나 그런 것도 도움이 될 수 있습니다.
또는 게임엔진 같은거 코드 다 공개 되어 있는게 많으니,
그런 큰 프로젝트에서는 어떤 구조로 되어 있는지 확인해보시고 그런것도 좋구요^^
아참..
그리고 잘 짜여졌다는 기준은 아니지미나
TDD 를 하면 코드가 훨씬 간결하고 보기 좋아집니다.
TDD 가 힘들어도 TestCode 작성을 염두하고 개발하시면 훨씬 코드가 깨끗해지는 느낌이 들게 됩니다.
기본으로 돌아가라는 말이 있습니다. 항상 기본이 중요하지요.
빨리 날고 싶겠지만 기본 없이는 얼마 날지 못하고 추락합니다.
학교 공부가 실무에는 별로 도움이 안된다고 생각될 수도 있겠지만
학교 공부는 기본을 탄탄하게 해줍니다.
남들은 칼질 하고 있는데 혼자만 양파깍기 한다고 생각하여 조급해 하실 필요 없습니다.
평생동안 할 건데 시간은 많지 않겠습니까?
물론 학교 공부만이 기본을 닦을 수 있는 길은 아닙니다.
혼자서도 충분히 할 수 있지만 학교 공부가 지름길에 해당되겠지요.
무엇이든 언제든지 질문을 할 수 있는 교수라는 사람들도 가까이 있으니까요.
이미 학교를 떠났다면 학교에서 가르치는 내용을 찾아 독학할 수도 있고
또 찾아보면 동영상 강의들도 있고 많은 방법들이 있습니다.
기본을 잘 닦고 나면 남들이 짜놓은 훌륭한 코드들을 볼 때 더 많은 것이 눈에 보일 겁니다.
자신이 아는 만큼만 눈에 보이는 법이니까요.
자바가 OOP인 관계로 OOP, 디자인 패턴 그리고 리팩토링에 대해서 잘 알지 못하면 만족할만한(?) 코드는 나오기 힘들다고 보입니다. 스프링도 그 원칙들은 잘 지킨 예이고 좋다고 하는 코드들은 원칙에 충실한 코드들이라고 생각합니다. 다만 개인적인 견해로는 이런 것들이 프로그래밍 시작하면서 접해서 이해하고 적용하기가 만만치 않다는 점이죠. 오랜 기간의 경험과 노력의 산물이기 때문에...
리펙토링을 잘하려면?
리펙토링을 잘하려면 리펙토링 안하게 끄름 만들면 된다.. 라고 되어 있습니다.
리펙토링 "갑" 아저씨가 한 말임 ....암튼 대충 생각나는데로 나열하자면..
1. 명명규칙을 정하라.
-> 변수의 명명규칙을 정하고 최대한 읽기 쉽고 이해하기 쉬운 변수명을 만드세요
2. 전역변수를 최소화 하라.
-> 자주 사용한다고 , 여러군데에서 사용하는 변수는 캐쉬로 만들고 싱글톤으로 접근하는게 좋습니다.
3. 함수의 인자값을 너무 많이 사용하지 않도록 하라
-> 일단 함수의 인자값이 많다는건 기능이 복합적이다 라고 말할 수 있습니다.
기능을 쪼개어 명시적으로 접근 가능하도록 만들도록 하세요
4. 함수의 기능을 최적화 하라
-> 불필요한 비교문이 있는지, 반복문안에 비교문을 최소화 할 수 있는지 확인하고
반복적으로 사칙연산을 하고 있다면 한개의 변수에 담아서 사용하세요
5. 어느정도 변수 이름과 함수 이름이 정리되고 기능이 정리되고 주석이 처리가 되었다면
클래스 단위로 나눠야 할 것들이 있는지 찾아 나눌것들은 또다른 클래스로 나눠서 구현하고
붙이는 작업을 합니다.
아.... 더이상은 귀찮기도 하고 생각도 안나고 ㅋㅋ
전 리펙토링 보다는 OOP , 디자인패턴을 더욱 공부하라고 권하고 싶네요..
리펙토링은 소 잃고 외양간 고치는거 같아서 말입니다. ^^




스프링을 참조해보세요..
멋있어요 라는 말밖에 안나와요 -_-)b
구글 샘플 코드도 아닌 것 같아도 은근 괜찮은 코드들이 많은편이에요.
간단한 코드 컨벤션인데 따라 해보면 아! 이거 괜찮구나 하는걸 많이 느낍니다.