객체지향 프로그래밍을 제대로 이해하지 못하고 막무가내(?)로 사용하고 있는 것 같은 생각이 여러번 들었다.
대충 알고 있는 것 == 모르는 것 😞 OOP 뽀개기 가보자 ❗️
오늘 다루는 내용
Object 객체 Oriented 지향 Programming 프로그래밍의 약자로 OOP는 객체지향 프로그래밍을 말한다.
쉽게 말하면 조립식 프로그래밍이라고 비유할 수 있을 것 같다.
자동차를 비유하면 사람은 자동차를 시동을 켜고, 핸들을 움직이는 등 다양한 행동을 하지만, 그 내부에는 수 많는 부품으로 이루어져있는 것처럼 부분부분을 만들어놓고 이를 연결시키는 프로그래밍이라고 생각해도 좋을 것 같다.
그래서 사람이 브레이크를 밟으면 브레이크 밟는 동작을 요청하고, 크락션을 울리면 크락션을 울릴 수 있는 동작을 리턴해준다.
자, 여기까지 좋다. 왜 OOP를 해야 할까?
한 곳에 코드를 쭉 작성하는 것이 아닌 이를 분리하여 작성하기 때문에 무엇보다 관리가 편할 것이다. 프로그램의 규모가 커지면 만 줄이 넘어가는 코드를 작성하게 되는데 에러가 발생하면 이를 수정하며 유지보수 하는 것이 쉽지 않을 것이다.
또 여러번 사용하게 되는 코드를 다시 만들어서 중복 코드를 만드는 것이 아니라 쉽게 코드를 재사용할 수 있다. 코드를 재사용하면 당연히 생산성이 올라가고 코드를 관리하기가 편할 것이다.
public class Dog {
// 필드
String name;
int age;
// 메소드
// 짖기, 물기(?) 등 -> 강아지가 하는 행동(동작들)
void bark() {
System.out.println("왈왈 나는 강아지랍니다");
}
}
클래스는 다음과 같이 class 예약어를 사용하며 첫 글자를 대문자로 사용하는 파스칼케이스를 사용한다.
(*당연히 자바에서 제공하는 예약어는 클래스명으로 사용할 수 없다.)
상단에서 이야기 했던 자동차를 예로 들면 자동차가 갖을 수 있는 속성을 클래스 안에서 만들게 되는데 이를 '필드' 라고 합니다.
자동차 필드의 예 - 자동차 이름, 자동차 회사 이름, 자동차 종류(하이브리드, 전기차) 등
또한 자동차가 할 수 있는 행동이나 동작을 클래스에서 표현할 수 있는데 이를 '메소드' 라고 합니다.
자동차 메소드의 예 - 경적, 브레이크, 방향등
(*생성자는 다음에 언급할 예정입니다.)
객체란 클래스에 선언된 모양 그대로 생성된 실체를 말하며 이를 '클래스의 인스턴스'라고 부른다.
인스턴스란 클래스를 통해서 구현해야할 객체가 실제로 구현된 구체적인 실체를 말한다.
말로 설명하니 참 복잡한 것 같다.
객체는 메인 클래스나 내가 사용하고자 하는 클래스에서 다음과 같이 생성할 수 있다.
Dog dog = new Dog();
다음과 같이 객체를 생성하면 Dog 클래스에 있는 필드에 접근할 수 있도록 준비가 된 것이다.
그리고 도트연산자를 통해 실제로 해당 클래스 필드에 접근한다.
System.out.println(dog.age);
System.out.println(dog.name);
결과를 받아보면 0 null 이 출력된다. 왜냐하면 필드를 생성하고 값을 초기화하지 않으면 자동으로 기본 값으로 사용되기 때문이다.
dog.age = 2;
dog.name = "루루";
다음과 같이 도트연산자를 통해 필드의 값을 변경할 수 있으며 해당 값을 출력할 수 있다.
System.out.printf("강아지의 이름: %s\n", dog.name);
System.out.printf("루루의 나이: %d\n", dog.age);