본문 바로가기

프로그래밍

[개발] 개발자가 성장하려면?(개인적인 의견) 5년 동안 안드로이드 개발자로 일하면서 성장하게 된 계기와 느꼈던 점을 정리하려고 한다. 돈에 포커싱이 맞춰져 있는 것은 아니고 실력적으로 이렇게 해야 늘고 개발자 수명도 길게 가져갈 수 있지 않을까라는 생각으로 정리해보았다. 1. 기술 부채는 자산이 아니다. 다른 분야(부동산, 주식 등등)에서의 부채는 자산일 수도 있다. 하지만 개발 분야만큼 기술적 부채 혹은 TODO 리스트가 많아지는 것은 최악이라고 생각한다. 후에 저 기술적 부채 혹은 TODO 리스트 때문에 다음 스텝으로 못 넘어가거나 혹은 엄청 오래 걸리는 상황이 발생할 수도 있다. 처리해야할 것들은 최대한 빨리 처리해주는 것이 좋다. 2. 사이드 프로젝트를 하자. 안정성 혹은 시간적인 문제 때문에 실무에서 신기술 혹은 트렌디한 기술을 적용하기란..
[프로그래밍] 테스트 코드 작성 시 private 메소드에 대한 고찰 회사에 다니면서 혹은 사이드 프로젝트를 하면서도 왠만하면 테스트 코드를 작성해 왔었다. 첫 회사를 나오고 나서는 위 주제와 같은 고민을 한 적이 없었지만 앞으로 좀 더 규모가 커지고 복잡한 로직이 들어가는 프로젝트를 진행하게 된다면 위 같은 고민을 할 것 같아 미리 정리해두려고 이 글을 적는다. 잘 지켜질지는 모르겠지만 그래도 최대한 지켜봐야겠다. 내린 결론은 private 메소드에 대한 직접적인 테스트 코드를 왠만하면 작성하지 않는 것이다. - private는 밖으로 노출된 부분이 아니기 때문에 Reflection을 통해서 강제적으로 테스트 코드를 짤 수 있음.(Android에서는 PowerMock에서 제공) - 테스트 코드는 기존의 객체 혹은 클래스에 전혀 변형을 주지 않고 테스트하는 게 제일 좋은 ..
[Design Pattern] Adapter Pattern(어댑터 패턴) - 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴- 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해줌- 안드로이드에서는 RecyclerView, ListView, ViewPager, ViewFlipper 등에서 주로 쓰임 - 예제 설명1. Socket이라는 클래스는 getVolt 함수 호출 시 무조건 120 값을 가진 Volt 클래스 객체를 리턴함2. SocketAdapter라는 인터페이스에서 120, 12, 3 메소드를 선언함3. SocketClassAdapterImpl(Socket 클래스를 상속), SocketObjectAdapterImpl(Socket 클래스를 상속받지 않음)에서 SocketAdapter를 Implements하여 해당 메소..
[프로그래밍] Bad Smell을 가진 나쁜 코드에 대한 고찰 경력이 그렇게 오래된 것은 아니지만 코드 리뷰, 프로젝트 유지 보수를 하면서 느낀 경험에 따라 코드에 대해 좋고 나쁨을 판단하는 기준이 생겼다. 나만의 나쁜 코드에 대한 기준을 정리하고자 이 글을 쓴다. 피드백을 주시면 더욱 좋을 것 같다.(주로 쓰는 언어가 자바이고 안드로이드만 한 상태라 자바, 안드로이드 관련해서 정리함) 1. 너무 긴 코드 - 한 메소드 혹은 클래스 안에 너무 많은 내용이 들어가 있는 상태인 경우가 대부분임- 메소드라면 해당 안의 기능을 따로 메소드로 빼내야할 필요성이 있음- 클래스라면 혹시 너무 많은 책임을 담당하고 있지 않은지 검토할 필요성이 있으며 필요하다면 분리할 책임들을 담당할 클래스를 만들어야 함 2. if ~ else if ~ else if~ ..... else - 이런..
[Design Pattern] Strategy Pattern(전략 패턴) - 실행 중에 알고리즘을 선택할 수 있게 하는 디자인 패턴- 인터페이스를 하나 만들고 그 인터페이스를 위임받아 알고리즘을 가진 클래스를 구현한 후 필요할 때 해당 클래스의 객체를 생성하여 set하는 형태로 구현- 예제 설명 1. Player라는 클래스는 Food, Weapon이라는 인터페이스 객체를 가지고 있음 2. Apple, Meat, ArrowRoot는 Food라는 인터페이스를 위임받음 3. Bomb, IcedTuna는 Weapon이라는 인터페이스를 위임받음 4. Player 객체에서 Food와 Weapon을 변경하면서 해당 동작 수행하면서 확인 - 예제 : https://github.com/masonljh/design_pattern/tree/master/src/main/java/StrategyPa..