객체지향 프로그래밍 : 클래스, 추상화, 객체, 변수 2023. 5. 19. 11:14

namin0_0·2023년 5월 29일
0

객체지향 언어

: 현실세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으며, 발생하는 모든 사건들은 객체간의 상호작용으로 이루어진다.

= 이 개념을 컴퓨터로 옮겨놓아 만들어낸 것.

객체지향 프로그래밍​

: 현실세계의 객체(사물, 개념)를 클래스(class)와 객체(object)의 개념으로 컴퓨터에서 구현

객체(insrance)

  • 사전적의미 : 실체하는 모든사물

  • 객체지향 언어에서 객체의 개념 : new 연산자를 통해 클래스의 설계대로 데이터를 메모리에 할당한 결과물 (insrance)

클래스

  • 객체를 정의해 놓은 것.

  • 객체의 설계도, 틀

  • 사물이나 개념의 공통요소(속성,기능)를 용도에 맞게 추상화시킴

추상화

  • 사전적의미 : 구체적 사물들의 공통된 특징

  • 프로그램에서 필요한 기능/속성을 추출하고, 불필요한 것을 제거하는 과정

객체

  • 추상화 > 클래스 작성 : 프로그램 만들 때 추상화 후 클래스를 작성

  • 만들 프로그램에 필요한 속성과 기능을 정의(추상화) 후 결과물을 객체지향 프로그래밍 언어를 사용해서 작성

    속성 : 추상화를 통해 나온 속성을 저장할 변수(멤버변수)의 데이터 타입과 이름을 정의

기능 : 추상화를 통해 나온 기능을 메소드로 정의하여 구현

변수의 종류

변수의 선언위치에 따라 구분한다.

1.지역변수

= 해당지역(메소드)에서만 사용 가능한 변수

= 반드시 초기화 해서 사용

2.전역변수(멤버변수, 인스턴스변수)

=해당클래스 내부에서만 사용이 가능한 변수

=객체 생성 시 해당 객체에서만 사용이 가능

=선언만해도 기본값으로 세팅​이 되어있다.

3.정적변수(클래스변수)

=클래스와 상관없이 사용 가능한 변수

=static 키워드를 이용해서 선언

=선언만해도 기본값으로 세팅이 되어있다.

**지역변수는 반드시 직접 초기화해서 사용해야 하지만, 전역변수, 정적변수는 선언만 하더라도 기본값으로 초기화된다.(배열선언 시 초기값과 동일)

변수선언

  1. 추상화 후 속성에 해당하는 변수는 전역변수로 선언

  2. 기능을 구현하기 위해 사용하는 변수는 지역변수로 선언

  3. 여러 기능에서 공동으로 사용해야 하는 변수는 전역변수로 선언

  4. 정적변수는 특별한 케이스를 제외하고는 사용하지 않음


실행 클래스에서 같은 클래스인 인스턴스를 두개 만들기

갖고있는 기능은 같지만 다른 주소값을 가지고 있기 때문에 다른 객체가 생성되는것!

stack hip

tv1 ---- power

tv1 ---- power

결과

power 기본 값이 flase로 TV가 꺼져있는거임.

tv1은 전원이 켜졌다>꺼졌다>켜짐

tv2는 전원이 켜짐

두개는 기능은 같지만 서로 다른 독립적인 객체임.


추상화 후 멤버변수 선언.

메소드 생성.

지역변수 생성 후 기능구현.



import java.util.Scanner;

​

public class TV {

// 속성 : 클래스 단위에 변수를 선언한다.(전역변수, 멤버변수 라고 함)

// 크기 자료형 int 변수명 inch

// 전원 자료형 boolean 변수명 power

// 채널 자료형 int 변수명 channel

// 볼륨 자료형 int 변수명 volume

//전역변수는 선언만하더라도 기본값으로 세팅이 되어있음

int inch; //0

boolean power; //false

int channel; //0

int volume; //0

//전원을 켜고/끄는 메소드

public void power() {

//power값이 true->false, false->true

if(power ==true) {

power = false;

System.out.println("전원이 꺼졌습니다.");

}else {

power = true;

System.out.println("전원이 켜졌습니다.");

}

}

//채널을 현재 채널에서 1올리는 기능

public void channelUp() {

if(channel==999) {

channel=0;

}else {

channel++;

}

System.out.println("현재채널 : "+channel);

}

//채널을 현재 채널에서 1내리는 기능

public void channelDown() {

if(channel==0) {

channel=999;

}else {

channel--;

}

System.out.println("현재채널 : "+channel);

}

//볼륨을 현재 볼륨에서 1 올리는 기능

public void volumeUp() {

if(volume<100) {

volume++; 

}

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

}

//볼륨을 현재 볼륨에서 1 내리는 기능

public void volumeDown() {

if(volume!=0) { 

volume--;

}

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

}

public void play() {

Scanner sc = new Scanner(System.in);

while(true) {

System.out.println("========== TV 리모콘 =========");

System.out.println("1.전원버튼");

System.out.println("2.채널 올리기");

System.out.println("3.채널 내리기");

System.out.println("4.채널 변경");

System.out.println("5.볼륨 올리기");

System.out.println("6.볼륨 내리기");

System.out.println("0.시스템종료");

System.out.print("선택 > ");

int select = sc.nextInt();

if(2<=select && select <=6) {//채널변경 or 볼륨조절 기능 선택 시

if(power==false) {//전원이 켜져있는지 확인하는 if

System.out.println("전원을 켠 후 사용해주세요!");

continue;//전원이 꺼져있으면 반복문의 조건식으로 이동

}

}

switch(select) {

case 1:

power();

break;

case 2:

channelUp();

break;

case 3:

channelDown();

break;

case 4:

System.out.print("채널번호 입력 : ");

int changeChannel = sc.nextInt();

if(0<=changeChannel && changeChannel<=999) { 

channel = changeChannel;

}else { 

System.out.println("존재하지 않는 채널입니다.");

}

System.out.println("현재채널 : "+changeChannel);

break;

case 5:

volumeUp();

break;

case 6:

volumeDown();

break;

case 0:

System.out.println("시스템을 종료합니다.");

return;//리턴타입이 void인 메소드를 현재시점에서 강제로 종료하는 코드

default:

System.out.println("잘못입력하셨습니다.");

break;

}

}

}

}

​
profile
갓생살기프로젝트

0개의 댓글