본문 바로가기

Ruby

[Ruby] 루비의 깔끔한 문법

1. @를 이용한 로컬 변수와, 인스턴스 변수의 구분

루비는 변수 이름에 @를 붙이면 인스턴스 변수로 동작한다.

이러한 강제적인 컨벤션은 완벽한 인텔리센스가 제공되지 못하는 루비 특성 상 굉장히 유용하며, 코드를 보았을 때 어떠한 변수가 인스턴스인지, 로컬인지를 한눈에 파악할 수 있도록 해준다.

C++등에서 쓰이는 이름 앞에 m_를 붙이는 컨벤션보다 깔끔하다는것은 말할 것도 없다.


2. !, ? 를 접미사로 가지는 네이밍 규칙

메소드 뒤의 ? 는 이 메소드가 bool 값을 리턴함을 의미한다, 

메소드 뒤의 ! 는 메소드가 자기 자신을 변경함을 의미한다, 예를들어 vector의 reverse 같은 메소드들은 reverse되는 결과를 리턴하는지, 자기 자신을 reverse하는지가 굉장히 애매하다, 다른 정적 언어는 IDE의 도움을 받아, 리턴값이 void인지 어떤것인지를 보고 대충 파악을 할 수 있지만, 메소드 정의 시 명시적으로 리턴값을 지정하지 않는 루비에서는 그런 도움을 받을 수 없어 판단이 애매하다, 이 때 ! 가 출동하면 이러한 문제를 깔끔하게 해결할 수 있다.


사실 ! 에 대해서는 깔끔한 문법이라고 하기에는 애매한 부분이 많다,

pop, clear처럼 자기 자신을 변경하면서도 ! 가 붙지 않는 메소드가 있는가 하면, 몇몇 라이브러리에서 ! 는 다른 의미로 사용된다. 

하지만 위에 적어놓은 용례에 한정해서는 메소드의 동작을 굉장히 명확하게 알려주는 효과가 있기 때문에 이곳에 적어놓았다.