더북(TheBook)

2.1 객체 사용


오래 전 객체를 발명하기 전에는 함수(function)를 호출하는 방식으로 프로그램을 작성했다. 함수를 호출하면 함수는 결과를 반환한다. 이 결과를 어떻게 계산했는지 신경 쓸 필요 없이 그냥 사용하면 된다. 함수를 사용하면 작업을 공유할 수 있다는 장점이 있는데, 이 점이 중요하다. 작업 방법을 몰라도 다른 누군가가 작성한 함수를 호출할 수 있다.

객체는 여기에 한 차원을 더했다. 객체마다 자신만의 상태(state)가 있다. 이 상태는 메서드를 호출해서 얻는 결과에 영향을 준다. 예를 들어 inScanner의 객체일 때 in.next()를 호출하면 in 객체는 이전에 무엇을 읽었는지 기억하고 다음 입력 토큰을 준다.

다른 사람이 구현한 객체의 메서드를 호출할 때는 내부에서 무슨 일이 일어나는지 몰라도 된다. 이 원칙을 캡슐화(encapsulation)라고 하는데, 이는 객체 지향 프로그래밍의 핵심 개념이다.

언젠가는 다른 개발자가 사용할 수 있는 객체를 제공해 자신의 작업을 공유하고 싶을지도 모른다. 이때는 자바에서 같은 동작을 하는 객체를 생성하고 사용하는 메커니즘인 클래스(class)를 만들어 제공하면 된다.

달력의 날짜를 조작하는 작업을 생각해 보자. 달력은 월마다 길이가 다르고, 윤년과 윤초까지 있어서 다루기가 좀 까다롭다. 이런 까다로운 세부 사항을 이해하고, 다른 프로그래머가 사용할 수 있는 구현체를 만들어 제공하는 전문가가 있다면 좋을 것이다. 이 상황에서 자연스레 객체가 나온다. 예를 들어 날짜 객체의 메서드는 오늘의 요일이나 내일의 날짜 같은 정보를 제공한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.