
포스트를 작성하게 된 계기
자바 스프링으로 웹 벡엔드 서버 개발 프로젝트를 몇번 진행해보았는데, 객체지향에 대한 개념이 부족하여서 유지 보수성이 부족한 코드를 작성한 경험이 있다. 이번 포스트로 객체 지향의 개념을 다시 한번 정리해보고 객체 지향적 프로그래밍에 대해서 다시 한번 더 되새기기 위함이다.
한 학생이 학교를 가는 과정을 절차 지향 방식, 객체 지향 방식으로 표현하면 다음과 같이 표현할 수 있다.
절차 지향 프로그래밍 방식
객체 지향 프로그래밍 방식
객체 지향 프로그래밍 방식에서도 학교를 가는 행위 자체는 시간 순으로 발생할 것이다. 그런데 객체 지향 프로그래밍 방식을 표현한 부분을 보면, 객체와 객체 간 상호작용만 확인할 수 있을 뿐이지, 행동의 시간순서는 확인할 수 없다. 시간 순서보다, 객체 간 관계에 초점을 두고 있는 방식인 것 같다
객체를 정의하고,
각 객체 제공하는 기능들을 구현하고,
각 객체가 제공하는 기능들 간의 소통(메세지 전달)을 통하여 객체간의 협력을 구현
객체 지향적으로 프로그래밍을 할 때는 클래스 내부에 각 객체의 속성을 멤버 변수로 정의해둔다. 각 객체의 역할을 메서드로 구현하고, 각 객체간의 협력을 구현하는 것으로 할 수 있다.
대학교 수강 신청 시스템을 예로 들어보자.
학생이 수업을 골라담아서 신청해야하는 시스템인데, 이때 학생은 어떤 정보를 담고 있어야할까?
위와 같은 정보를 담고 있어야한다.
위 예시를 코드로 옮겨보면 아래와 같이 작성할 수 있다.
public class Student {
String studentNumber;
int grade;
String name;
String major;
List<String> registerClass;
}
학생에 대한 정보는 멤버 변수로 저장하는데, 그럼 학생이 수강 신청하는 행위 자체는 어떻게 정의할 수 있을까?
메서드를 통해서 정의 가능하다.
함수의 일종인데, 클래스 내부 함수를 메서드로 부른다. 클래스 내부의 멤버 변수를 이용하는 함수이고, 메서드를 정의함으로써 해당 객체의 기능이 구현된다.
이전 예시를 이어서 설명하면,
아래와 같은 메서드를 정의하면 수강 담기 기능을 구현할 수 있다.
public void addClass(String class) {
registerClass.add(class);
}
위 함수를 학생 클래스 내부에 정의하고, student.addClass("추가할 수업 이름") 를 통해서 학생 객체에 수업을 추가할 수 있다.