Java 클래스, 변수에 대하여
Java 하면 많은 사람들이 Class에 대해서 떠올립니다.
Class란 메소드를 가지고 있을 수도 있고 변수를 가지고 있을 수도 있습니다.
즉, 어떤 프로그램에서 특정 기능을 담당하고 있는 녀석이라고 볼 수도 있는데요.
그렇기 때문에 이식성이 좋게 만들어야 하는 특징이 있습니다.
코드를 짤 때 단순하게 그 코드에서만 돌아가게 작성하는 것이 아니라, 이 코드가 다른 코드에서도
손쉽게 사용되게 하기 위해서는 어떻게 해야 하는지 고민해야 하는 것입니다.
예를 들어, JSP에서 로그인하는 과정에 대해서 생각해보겠습니다.
일반적인 로그인 화면입니다. 클래스의 Login 메소드에서 어떻게 구현을 하는 것은 개발자의 마음이긴 하지만,
로그인이라 함은, 기본적으로 여러 명의 사람들이 로그인을 한다는 것을 우리는 알고 있습니다.
그런데 코드 안에서 로그인 하는 정보를 규정짓고 있다면 어떻게 될까요? 로그인은 오직 한명 밖에 할 수 없을 것입니다.
그렇다면 이런 문제를 피하기 위해서는 어떻게 해야 할까요?
간단한 해결책으로는 파라미터로 아이디와 비밀번호 값을 받는 것입니다.
조금 황당한 얘기처럼 들릴 수도 있지만, 조금만 응용을 하면 많이들 실수를 하는 부분입니다.
물론 처음부터 완벽한 코드가 나올 수는 없습니다. 코드를 한번 작성하기 시작하면
지속적인 코드 리팩토링을 통해서 보완할 수 있는 부분은 계속해서 보완해 나가야겠죠?
이렇게 완성된 하나의 클래스는 어떤 책임을 지고 있을 것입니다. 위의 예제에서는 로그인에 대한 책임을 지고 있겠죠.
사용자로부터 아이디 값과 비밀번호 값이 넘어오면 DB에 있는 정보와 일치하는지 확인을 하고 그에 따른
결과를 return 해주어야 합니다.
다시 말해, 클래스란 어떤 한 행위에 대한 책임을 지고 있다고 생각하시면 됩니다.
혹은 비슷한 행위들의 집합이라고도 볼 수 있습니다. (행동 하나하나를 메소드로 정의할 경우)
물론 클래스에는 메소드만이 아니라 변수도 있습니다.
변수는 대체로 접근자를 사용하는데, 대표적으로 private, public, protected가 있습니다.
private 접근자는 오직 그 클래스 안에서만 사용이 가능합니다.
외부에서 이 변수에 직접적으로 접근할 수 없도록 하고 싶을 때 많이들 사용합니다.
그런데 외부 중에서도 상속받은 클래스에서는 접근을 허용하고 싶은 경우가 있습니다. 그런 경우에는
protected 접근자를 사용합니다. 그러면 외부 클래스더라도, 상속 클래스라면 해당 변수에 직접적으로 접근할 수 있습니다.
마지막 public 접근자는 외부 클래스에서도 마음대로 접근할 수가 있습니다.
그렇다면 접근자는 왜 사용하는 것일까요? 저 역시 아직 이에 대한 정확한 답을 들은 적은 없습니다.
단순히 외부에서 접근하고, 접근하지 못하게 하는 것이 무슨 상관이라고?
이 문제에 대해 오랫동안 생각해본 결과, 특정 변수에 직접적으로 접근할 수 없다면 우회할 수 밖에 없습니다.
그리고 이 우회하는 과정에서 log를 남길 수 있는 것입니다. 예를 들면 그 변수에 접근하려는 사람에 대한
간단한 정보를 남길 수가 있는 것이죠. 시간대는 어떻게 되는지, (가능하다면) 지역은 어디인지, 아이피는 어떻게 되는지 등을
남길 수가 있습니다. 그래서 그 변수가 변하게 되면 로그가 남아서 누가 변경을 했는지 조금이라도 쉽게 알 수가 있는 것이죠.
이상으로 클래스와 변수에 대해서 주절주절 제 생각을 써봤는데요.
선의의 댓글은 환영하지만 욕설은 삼가해주시기 바라겠습니다.