내 방도 청소 안하는데..(Clean Code)

eland·2024년 7월 9일

클린 코드를 간단하게 한 문장으로 정리한다면 ?

가독성,안정성,성능이 좋은 코드





클린 코드와 리팩토링

사람들은 만드는데에도 귀찮고 생각하기도 귀찮은 클린코드를 왜 쓸까?

그 이유는 시간이 지나도 생산성이 유지되고 장기적으로 관리 비용이 낮아서라고 말할 수 있다.

간단하게 말하자면 코드를 읽으며 짐작했던 기능을 각 루틴이 그대로 수행하면 클린 코드이다.

한번 지저분해진 곳은 계속 더욱 더 지저분 해진다는 깨진 유리창 이론이라는 이론이 있다. 이 처럼 코드도 기능만 제대로 돌아간다고 안일하게 짜다가는 걷잡을 수 없이 난잡한 코드가 될것이다.

이를 방지하기 위해서는 처음부터 코드를 클린하게 짜는 클린 코드의 방식을 따르는 것이 효율적일 것이다.

이해를 위한 시간을 최소화 시키기

클린 코드의 방식을 적어보자면 다음과 같이 적을 수 있었다.

  • 의도가 분명하게 코드를 작성하자.
  • 변수 명을 구체적으로. 나만이 아는 임의의 값(a,b,c,d)를 넣으면 코드를 이해하기에 힘듦
  • 모호한 단어를 포함하지말자(data의 구조가 아니라 data의 의미를 나타내야 함)
  • 접미사로 컨테이너가 포함된 이름은 복수어로 표현하자.
  • 약어를 쓰지 말자
  • 불필요한 단어(Info,Data)는 지양
  • 발음하기 쉬운 단어로 설정
  • 패턴 같은 부분은 주석으로 사용 가능 ( 메소드 이름으로 넣으면 더 더러움)
  • 조건문시 부정문 보다는 긍정문으로.
  • 같은 이미를 가진다면 같은 영어단어를 써라
  • 일관성 있는 어휘를 사용해라
  • 자료형은 변수 명에 되도록 안 들어가게 처리해줘라
  • 주석을 적을거면 의미를 명료하게 밝히도록 처리 ( TODO주석 작성 )
  • 저자 정보 주석, 주석 처리된 코드들은 없애도록 처리. (지저분 해짐)

여기있는 방식을 통해서 주어진 치킨집의 정보를 클린 코드 스럽게 작성해보면 다음과 같이 만들 수 있다.

치킨집
매장이름 : String
매장오픈일 : Date
사장님 이름 : String

매장정보출력() : void
주문접수() : void
주문거절() : void

public class chickenRestaurant{
	private String name;
	private Date openDate;
	private String ownerName;

	//대충 생성자
	//대충 getter,setter

	@Override
	public void toString();
	public void acceptOrder();
	public void rejectOrder();
}

메소드 작성법

메소드 작성법이라고 거창하게 말해봤자 사실 메소드 작성법에서 가장 중요한 것은 메소드 추출(*매우 중요)이다.

예를 들어 if/else문 안에 로직은 가능한 메소드로 추출하여 구현하는 것이 좋다라는 게 메소드 추출이라고 할 수 있다. 또한 if/else문을 쓸 때 비교 기준이 뒤에 있는게 매끄럽고 보는 사람도 이해하기에 편리하다고 생각했다.

이와 반대로 do-while은 읽는 사람이 코드를 2번 읽게되는, 번거로운 작업을 하게 되어서 조건을 눈에 보이는 곳에 미리 보여 주는 for문 형식으로 쓰는게 좋다고 생각한다.



쇼트 서킷( Short Circuit )

영리하게 작성된 복잡한 코드 ( 3줄 코드를 1줄로 줄인다던가 ) 가 다른 사람들이 이해 하는 데에는 힘들다는 방식이다. 이를 막기 위해서는 간단한 코드를 위해서 모든 기능을 압축하기 보다는 모든 메소드는 하나의 기능만 담당하도록 처리하는 것이 좋을 것 같다. ( 값을 설정, 조회, 삭제 … )

얼리 리턴 ( Early Return )

더 이상 로직을 실행할 필요가 없을 때 return을 호출하여 메소드를 바로 종료하는 것이다. 메소드는 는 실행될 때 메모리에 올라가고 return 하고 종료할때 내려가기 떄문에 성능적으로 빨라진다는 장점이 있다.


추가적으로 생각해 본다면 반환을 제일 끝에 하게 된다면 어디서 어떤 조건이 이런 에러 반환 값을 넣어 놨는지 찾아내기가 힘들어진다는 단점도 있다. (로직 역추적 불가능)


클린 코드를 배우며 어떻게든 기능만 완성시키려고 했던 기존의 방법이 클린 코드의 작성 방법을 대다수를 무시했다는 것을 알 수 있었다. 중구난방으로 작성한 메소드와 메소드마다 달아놓은 주석과 같이 내가 보기에 편하고 만들기 편한식으로만 작업했던 것이다.

추후 협업이나 배포를 통해 다른 사람들에게도 코드를 보여줄 일이 많을 텐데 이런일 들을 대비하여 클린 코드 작성방법을 지금부터라도 코드를 작성할때마다 계속 리마인드 하여 손에 좀 익게 작업해야겠다.


처음부터 완벽한 소스 코드를 작성하는 사람은 아무도 없다.

그래도 이렇게 짜지는 말자

profile
더 이상 핑계를 댈 때가 아니다.

0개의 댓글