Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

성장기록지

절차지향 vs 객체지향 본문

카테고리 없음

절차지향 vs 객체지향

pengcon 2024. 2. 28. 17:58

절차지향이란??

실행 순서(절차)를 지향하는것이다.

프로그래밍의 흐름을 순차적으로 따르며 처리하는 방식이고,

어떻게? 할지를 중심으로 둔다.

객체지향이란??

이름 그대로 객채를 지향한다.

세계의 사물이나 사건을 객체로 보고 객체의 상호작용을 중심으로 프로그래밍 한다.

무엇을? 에 대한 것을 중심으로 프로그래밍한다.

 

객체지향과 절차지향 비교

처음 자바를 접하는 사람들은 이 둘이 무슨

나루토와 사스케같이 대립하는 관계라고 생각하곤 한다.

하지만 객체지향과 절차지향은 대치되는 개념이 아니다. 

절차지향이 먼저 나오고 그 후에 필요에 의해 객체지향이 나왔기 때문에

우선 절차지향부터 살펴보며 어떻게해서 객체지향이 나오게 되었는지 설명하겠다.

 

절자지향에 대한 예시

 

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("티비가 꺼져있다.");
        }
    }
}

 

 

절차지향으로 간단한 코드를 만들어보았다.

프로그래밍 실행 순서를 지향에서 만들었기에 절차지향 코드이다.

(티비를 켜고,볼륨을 조절하고,티비를 끄고...) 

 

각각의 기능을 메서드로 만들고, 모듈화를 진행하며

읽기 좋고 유지보수가 좋은 코드를 작성하였다.

 

 

코린이: 메서드로 외 많들어요?? 모듈화는 머에요??

그런 여러분들을 위해 준비했다.

 

메서드를 만드는 이유 

https://wikidocs.net/225 

 

05-03 메서드 더 살펴보기

다른 프로그래밍 언어에는 함수가 별도로 존재한다. 하지만 자바는 클래스를 떠나 존재하는 것은 있을 수 없기 때문에 자바의 함수는 따로 존재하지 않고 클래스 내에 존재한다. 자바는…

wikidocs.net

 

모듈화

관리에 용이하게 모듈(기능) 단위로 분할하는 것

구글에 "자바 모듈화" 라고 치면 설명이 넘나 어렵게 나와있기 때문에 간단하게 설명하자면.

 

지금 만든것을 현실의 Tv라고 생각해보자.

우리는 tv를 키고 끌 때, 그리고 볼륨을 조절할 때 그 기능을 하는 버튼을 누른다.

다시 코드의 세계로 와서, 현실처럼 각각의 기능이 필요할 때 사용할 수 있도록 만들고싶다.

그래서 위의 기능들을 각각의 메서드로 만들었고 (전원,볼륨) , 그것이 모듈화라고 할 수 있다. 

 

 

찐 코린이 : 메서드가 뭐에요?? 학교에서 저렇게 함수 만드는거 안배웠는데???

그런 단계라면 이거 읽지말고 자바 기초 강의 하나 사서 듣는것을 추천한다...

 

아무튼 정말 깔끔쓰하게 작성되어 있는 것 같은 코드이다.

그렇다면 이렇게 이쁘게 짜여져있는 절차지향 코드의 한계를 알아보자.

 

절차지향 코드의 한계 : 데이터와 기능이 분리되어있다.

이 코드에서 데이터는 TvData 클래스에 있고,

기능들은 TvMain에 나뉘어져 있다.

기능과 데이터는 아주 밀접하다. 예시코드에서 봐도 알 수 있듯이 

반드시 필요한 기능들만 구현했는데, 데이터가 쓰이지 않은 기능들은 없다.

 

하지만 데이터와 기능이 분리되어있어서 유지보수가 2군데나 진행해야한다

작성 중..