본문 바로가기

객체지향

안티 패턴 (내 생각 포함)

프로그래밍 안티패턴이란 문제에 대해 자주 사용되는 프로그래밍 패턴이지만, 잘 모르고 무작정 쓰면 안좋은 결과를 가져오는 것을 말한다.

 

http://en.wikipedia.org/wiki/Anti-pattern#Programming_anti-patterns

위키백과에서 안티패턴의 여러가지 종류를 볼 수 있고 이 중 내가 범하고 있던 몇가지를 기억하여 다음부터는 내 코딩을 개선하려 한다.

 

나처럼 어디서 본 건 있어서 무작정 장단점을 알지 못하고 쓰거나, 패턴을 알맞지 않은 곳에서 써서 발생할 수 있는 문제이다.

우테코 미션에서 내가 범했다고 생각하는 안티 패턴들을 적어보겠다... (ㅠ)

 

 

 

 

  • 화물숭배 프로그래밍 (Cargo cult Programming)

프로그래밍 패턴에는 여러가지가 있다. 디자인 패턴에는 팩토리, 전략, 싱글톤 등 나는 어디서 들어본 건 있는데 정확히 써본적은 없다.

이런 상태에서 무작정 패턴을 적용하지 말라는 것이다.

 

또다른 예로는,

  • 다른 프로그래밍 코드를 무작정 복사해올때
  • 디자인 원칙의 이유를 이해하지 않고 무작정 적용하려 했을 때 (우아한 테크코스 1주차에 내가 범했다.)
  • 자기설명이 되어 설명이 필요없는 코드에 쓸데없이 주석을 다는 경우
  • 가비지컬렉션에 의해 자동으로 제거되는 객체를 굳이 삭제 메소드를 통해 삭제할 때 (Google style guide 중 Finalizer사용금지항목이 있는데 일맥상통하는 말인 듯 하다.)

 

  • 금도금 (Gold plating)

가치를 창출할 수 있는 일정 시점을 넘어서도 계속하여 개발, 리펙토링을 진행하는 것이다.

고객이 요청한 정도만 처리하고 그 이상의 개발은 중지해야 한다.

 

 

  • 폴터 가이스트 (Poltergeist)

폴터가이스트의 사전적 의미는 물건이 떠다니고 가만있는 물체가 떨어지고 하는 괴현상을 말한다. (흉가에서 일어날듯한 심령현상..)

이처럼 유령처럼 나타났다가 사라지는 객체, 이처럼 수명이 짧고 단순한 일을 하는 객체를 생성해서 사용하는 것은 자원의 낭비가 발생한다는 것이다.

 개발자가 복잡한 아키텍쳐를 예상하고 개발을 진행하였을 때 나타날 수 있다.

 

폴터가이스트를 제거하는 방법은 클래스를 제거하고 그 로직을 호출된 곳에 추가하는 것이다.

 

우테코 미션을 진행하면서 System.out.println()의 기능을 구현하는 클래스를 따로 만들었는데 이런걸 보고 폴터가이스트라하나 라는 고민이 든다.

 

 

  • 매직 넘버 (Magic Number)

마법의 숫자. 직접 숫자가 입력된 하드코딩된 값이다. 

  • 의미를 가지고 있지만 설명되지 않은(명명되지 않은) 상수 형태로 있는 상태
  • 다른 의미로 착각 하면 안되는 값이 그럴 가능성이 있는 상태

 

하드코딩된 값은 코드를 읽는 사람이 이해하기 힘들 수 있다. 상수를 정의하고 이름으로 역할을 한눈에 볼 수 있으면 좋다.

(우테코 1차미션에서 수많은 매직 넘버를 사용했다.....)

 

 

 

 

 

 

 

(위키백과에는 없지만) 예외에 대하여..

finally문 안에 return문을 넣으면 catch에서 잡은 예외가 무시된다. 절대 finally 문에서 return 금지

또한 if 문으로 처리할 수 있는 검사에 과도한 try, catch를 적용하지 말자. 예외사항은 프로그램에 아주 나쁜 예외가 발생했다는 것이며 많이 발생하면 좋지 않다.