JAVA 객체 지향 프로그래밍_1
메서드를 이용해서 프로그램을 정리 정돈 하는 기법을 procedual programming이라고 한다. 즉, 메서드를 이용해서 작은 부품을 만들고 이것을 결합해서 더 큰 프로그램을 만들어가는 테크닉이 procedual programming이다. 많은 컴퓨터 언어가 이 패더라임을 따르고 있다. 대표적인 것이 C 언어이다. 하지만 몇몇 컴퓨터 엔지니어들은 메서드만으로 프로그램을 만드는 것에서 부족함을 느꼈다. 그래서 서로 연관된 메서드와 변수들을 모아서 그룹핑하고 거기에 이름을 붙혀서 정리 정돈을 하고 싶어졌고, 그래서 만든 수납상자가 Class다. 클래스를 중심으로 프로그램의 구조를 만들어가는 컴퓨터 프로그래밍 방법론을 객체 지향 프로그래밍, 또 이런 방법론을 언어 차원에서 제공하는 언어들을 객체 지향 언어라고 한다. 물론 이것은 객체 지향을 매우 편협하게 정의한 것이다. 하지만 때로는 편협한 것이 유용할 때가 있다. 객체 지향을 처음 접한다면 더욱 그렇다. 메서드와 변수를 그룹핑하고 이름을 붙힌 것이라는 단순한 정의를 바탕으로 객체 지향의 다양한 얼굴을 풍부하게 익혀나가보자. 지금부터 우리는 현대 프로그래밍 언어를 받치고 있는 기둥인 객체 지향에 대해 살펴보자. 이를 제대로 익혀두게 되면 코드를 단정하게 정리 정돈하는 방법을 알게 될 것이고, 이러한 방법에 익숙해지면 분신술이라고 할 수 있는 인스턴스를 만들 수 있게 될 것이고, 부모 클래스의 기능을 자식 클래스에게 물려줄 수 있는 상속을, 또 클래스의 설계도라고 할 수 있는 인터페이스와 같은 현대 프로그래밍 언어들의 찬란한 기능들을 받아들일 수 있을 것이다.
클래스와 인스턴스
클래스란 서로 연관된, 같은 주제를 가지고 있는 변수와 메서드를 그룹핑한 껍데기이다. 클래스와 인스턴스에 대해 빠른 이해를 위해 다음 예를 살펴보자. 자신의 방을 class를 이용해 구분해본다고 하면,
- class 종류 : 모든 교과서 , 모든 공책 , 모든 옷들
- 교과서 instance : 생물학교과서 , 영어교과서
- 공책 instance : 공책1, 공책2
- 옷 instance : 상의1 , 하의 1, 상의2, 하의2
이처럼, 인스턴스는 그냥 내가 맘대로 이름을 붙이는것 필요할때마다 저장해놓은 instance이름을 호출해서 내용을 가져올 수 있다.
변수와 메서드
메스드 추출을 이용해서 위와 같은 반복적인 작업을 메서드로 추출할 수 있다.
리팩토링을 이용해서 메서드 추출을 하게 되면,
다음처럼 메서드 추출을 할 수 있게 되고 메서드명은 우리가 임의로 synthetic하게 정해주면 된다.
위와 같이 매개변수를 메서드에 넣어주어서 사용할 수 있다.
이에 나아가서 더욱 간결하고 효율적으로 코드를 작성하는 방법은 다음과 같다.
위 코드는 변수 String delimiter를 설정해줌으로써 더욱 간결한 코드 작성을 할 수 있다.
이러한 방법으로, 변수 String delimiter의 값을 바꿀 때마다, 한꺼번에 delimiter를 인자로 갖고 있는 모든 메서드들의 인자값이 바뀌면서 효율적인 코드 진행이 가능해진다.
하지만 더욱 더 나아가 메서드 밖에서 변수 String delimiter의 값을 할당해 준다면,
위와 같은 더욱 더 간결하며 훨씬 더 유지 보수하기 쉬운 코드 작성이 가능해진다.
하지만 여기에서도, line 16 에서부터 line 26까지의 코드는 서로 연관성이 굉장히 강하다. 이러한 연관성을 갖는다면, 우리는 이를 class로 다시금 묶어줘야 한다. 이는 다음에 작성하게 될 포스트, JAVA 객체 지향 프로그래밍_2 에서 이어서 다뤄보도록 하겠다.