Java공부(코딩)

코딩초보의 Java(자바)공부 7일차 { 객체지향 프로그래밍 }

동곤일상 2024. 12. 12. 18:32
반응형
벌써 블로그시작한지
7일이 지났네요....
꾸준히 해봅시다 화이팅!!!


객체 지향 프로그래밍에 대해  알아보아요.


목차 )

  1) 객체지향과 절차지향의 차이

     1-1) 객체란?

 

  2) 절차지향 예시

 

 

  3) 객체지향

 

  4) 객체지향 심화 예제


1) 객체지향과 절차지향의 차이

  • 절차지향 :

절차 지향 프로그래밍은 프로그램의 흐름을 순차적으로 따르며 처리하는 방식이다.

, "어떻게" 중심으로 프로그래밍 한다.

 { 순서를 중요시함 ! } 

 

  • 객체지향 :

객체 지향 프로그래밍은 실제 세계의 사물이나 사건을 객체로 보고,

이러한 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식이다.

 { 즉, "무엇을" 중심으로 프로그래밍 한다. }

 

 

  • 둘의 중요한 차이

절차 지향은 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있다.

반면 객체 지향에서는 데이터와 데이터에 대한 행동(메서드)

하나의 '객체' 안에 함께 포함되어 있다.


1-1) 객체란?

속성과 기능으로 이루어진 사물로 생각하자

 

자동차)

속성:   차량 색상, 현재 속도

기능:   엑셀, 브레이크, 열기, 닫기

 

동물)

속성:  색상, 키 

기능:  먹는다. 걷는다.

 


2) 절차지향 예시

 

클래스

public class MusicPlayer {

int volume;

boolean isOn;

 

}

 

메인코드

public class MusicPlayer_1 {

 

public static void main(String[] args) {

MusicPlayer music = new MusicPlayer();

on(music);

up(music);

up(music);

down(music);

off(music);

}

public static void on(MusicPlayer music) {

music.isOn = true;

System.out.println("플레이어를 시작합니다 ! \n");

}

 

public static void off (MusicPlayer music) {

music.isOn = false;

System.out.println("음악플레이어를 종료 !\n");

}

 

public static void up(MusicPlayer music) {

music.volume++;

System.out.println("볼륨을 증가합니다 ");

System.out.println("현재볼륨 : "+music.volume+"\n");

}

 

public static void down(MusicPlayer music) {

music.volume--;

System.out.println("볼륨을 감소시킵니다 ");

System.out.println("현재볼륨 : "+music.volume+"\n");

}

}

이 처럼 절차지향 방식으로 음악플레이어를 조정하는 프로그램을

만들었습니다.

 

 절차지향의 한계)

 데이터와 기능이 분리되어있다는 점 입니다.

MusicPlayer 가 변경된다면 MusicPlayer_1 의 코드도

같이 변경해야한다는  문제가 발생.

( 관리해야할 곳이 2곳)

 

객체지향을 사용해 이 문제를 해결해봅시다.


3) 객체지향으로 변경

 

위에 음악플레이어를

기능과 데이터를  묶어서 구현

 

 

음악플레이어에 필요한

모든기능 존재

public class MusicPlayer {

int volume;

boolean isOn;

 

public void on() {

isOn = true;

System.out.println("플레이어를 시작합니다 ! \n");

}

 

public void off () {

isOn = false;

System.out.println("음악플레이어를 종료 !\n");

}

 

public void up() {

volume++;

System.out.println("볼륨을 증가합니다 ");

System.out.println("현재볼륨 : "+volume+"\n");

}

 

public void down() {

volume--;

System.out.println("볼륨을 감소시킵니다 ");

System.out.println("현재볼륨 : "+volume+"\n");

}

}

 

사용하는 코드를 한번 보자

public static void main(String[] args) {

MusicPlayer music = new MusicPlayer();

music.on();

music.up();

music.up();

music.down();

music.off();

}

 

온전히 뮤직플레이어 객체만 생성하면

모든 기능을 사용할 수 있게됨 +유지보수 측면에서도 유리함.

 

뮤직플레이어를 사용하는 입장에서 보면

뮤직플레이어 내부의 속성을 

자세히 몰라도 되고

필요기능만 알면 됨.

 

( 캡슐화 )

`MusicPlayer` 보면

음악 플레이어를 구성하기 위한 속성과 기능이

마치 하나의 캡슐에 쌓여있는 같다.

이렇게속성과 기능을 하나로 묶어서 필요한 기능을

메서드를 통해 외부에 제공하는 것을 캡슐화 한다.

 


 

4) 객체지향 예제 (심화)

 

계산기 만들기

 

Calculator 클래스를 만들어라.

 

멤버 변수

`int x, y;

 

메서드

set(x) : x세팅

 

reset() :  x 초기화

 

`add(y) : 더하기

minus(y) : 빼기

 

mulitply(y):곱하기

 

divide(y) : 나누기

(x,y 둘중 하나라도

0이 들어가면 경고문출력)


 

클래스

public class Calculator {

 

private int x; //set을 통해서만 접근

int y;

 

void set(int x ) {

this.x = x;

System.out.println("초기숫자 : "+x);

}

 

void reset() {

this.x = 0;

System.out.println("@@ 리셋! @@");

}

 

void add(int y) {

System.out.print(x+" + "+y+" = ");

x += y;

System.out.println(x);

}

 

void minus(int y) {

System.out.print(x+" - "+y+" = ");

x -= y;

System.out.println(x);

 

}

 

void mulitply(int y) {

System.out.print(x+" * "+y+" = ");

x *= y;

System.out.println(x);

 

}

 

void divide(int y) {

if(!(x==0 || y == 0)) {

System.out.print(x+" / "+y+" = ");

x /= y;

System.out.printf("%.3f \n",x);

}

else {

System.out.println("0은 나눌 수 없어요");

}

}

 

}

 

 

메인 코드(사용 코드)

public static void main(String[] args) {

Calculator cal = new Calculator();

cal.set(10);  //숫자 세팅

cal.add(5);

cal.minus(3);

cal.mulitply(3);

cal.divide(0);

//0은 나눌수없으므로 연산실행 x 

// 계산 하지않음

cal.add(3);

 

cal.reset(); //초기숫자 초기화

cal.add(3);

}

 

출력

초기숫자 : 10

10 + 5 = 15

15 - 3 = 12

12 * 3 = 36

0은 나눌 수 없어요

36 + 3 = 39

@@ 리셋! @@

0 + 3 = 3