성장기록지
절차지향 vs 객체지향 본문
절차지향이란??
실행 순서(절차)를 지향하는것이다.
프로그래밍의 흐름을 순차적으로 따르며 처리하는 방식이고,
어떻게? 할지를 중심으로 둔다.
객체지향이란??
이름 그대로 객채를 지향한다.
세계의 사물이나 사건을 객체로 보고 객체의 상호작용을 중심으로 프로그래밍 한다.
무엇을? 에 대한 것을 중심으로 프로그래밍한다.
객체지향과 절차지향 비교
처음 자바를 접하는 사람들은 이 둘이 무슨
나루토와 사스케같이 대립하는 관계라고 생각하곤 한다.
하지만 객체지향과 절차지향은 대치되는 개념이 아니다.
절차지향이 먼저 나오고 그 후에 필요에 의해 객체지향이 나왔기 때문에
우선 절차지향부터 살펴보며 어떻게해서 객체지향이 나오게 되었는지 설명하겠다.
절자지향에 대한 예시
TV의 볼륨을 조절하고 전원을 껏다켰다 하는 예제 코드로 한번 살펴보자.
public class TvData {
boolean isOn=false;
int volume=0;
}
public class TvMain {
public static void main(String[] args) {
TvData data = new TvData();
//티비 켜기
on(data);
//티비 볼륨 증가
volumeUp(data);
//티비 볼륨 증가
volumeUp(data);
//티비 볼륨 증가
volumeDown(data);
//티비의 상태 확인
showStatus(data);
//티비 끄기
off(data);
}
static void on(TvData data) {
data.isOn = true;
System.out.println("티비를 켰어");
}
static void off(TvData data) {
data.isOn = false;
System.out.println("티비를 껐어");
}
static void volumeUp(TvData data) {
data.volume++;
System.out.println("티비 볼륨:" + data.volume);
}
static void volumeDown(TvData data) {
data.volume--;
System.out.println("티비 볼륨:" + data.volume);
}
static void showStatus(TvData data) {
System.out.println("티비가 켜져있을까 꺼져있을까");
if (data.isOn) {
System.out.println("티비가 켜져있다");} else {
System.out.println("티비가 꺼져있다.");
}
}
}
절차지향으로 간단한 코드를 만들어보았다.
프로그래밍 실행 순서를 지향에서 만들었기에 절차지향 코드이다.
(티비를 켜고,볼륨을 조절하고,티비를 끄고...)
각각의 기능을 메서드로 만들고, 모듈화를 진행하며
읽기 좋고 유지보수가 좋은 코드를 작성하였다.
코린이: 메서드로 외 많들어요?? 모듈화는 머에요??
그런 여러분들을 위해 준비했다.
메서드를 만드는 이유
05-03 메서드 더 살펴보기
다른 프로그래밍 언어에는 함수가 별도로 존재한다. 하지만 자바는 클래스를 떠나 존재하는 것은 있을 수 없기 때문에 자바의 함수는 따로 존재하지 않고 클래스 내에 존재한다. 자바는…
wikidocs.net
모듈화
관리에 용이하게 모듈(기능) 단위로 분할하는 것
구글에 "자바 모듈화" 라고 치면 설명이 넘나 어렵게 나와있기 때문에 간단하게 설명하자면.
지금 만든것을 현실의 Tv라고 생각해보자.
우리는 tv를 키고 끌 때, 그리고 볼륨을 조절할 때 그 기능을 하는 버튼을 누른다.
다시 코드의 세계로 와서, 현실처럼 각각의 기능이 필요할 때 사용할 수 있도록 만들고싶다.
그래서 위의 기능들을 각각의 메서드로 만들었고 (전원,볼륨) , 그것이 모듈화라고 할 수 있다.
찐 코린이 : 메서드가 뭐에요?? 학교에서 저렇게 함수 만드는거 안배웠는데???
그런 단계라면 이거 읽지말고 자바 기초 강의 하나 사서 듣는것을 추천한다...
아무튼 정말 깔끔쓰하게 작성되어 있는 것 같은 코드이다.
그렇다면 이렇게 이쁘게 짜여져있는 절차지향 코드의 한계를 알아보자.
절차지향 코드의 한계 : 데이터와 기능이 분리되어있다.
이 코드에서 데이터는 TvData 클래스에 있고,
기능들은 TvMain에 나뉘어져 있다.
기능과 데이터는 아주 밀접하다. 예시코드에서 봐도 알 수 있듯이
반드시 필요한 기능들만 구현했는데, 데이터가 쓰이지 않은 기능들은 없다.
하지만 데이터와 기능이 분리되어있어서 유지보수가 2군데나 진행해야한다
작성 중..