2022.11.11 JAVA 12일차 클래스와 객체

2022. 11. 21. 21:55JAVA

클래스와 객체

클래스 란?
객체를 만들어 내기 위한 설게도 혹은 틀
연관되어 있는 변수와 메서드의 집합

객체 란?
소프트웨어의 세계에 수현할 대상
클래스의 선언된 모양 그대로 생성된 실체
클래스의 인스턴스(instance) 라고도 함
객체는 모든 인스턴스를 대표하는 포괄적 의미
클래스의 타입을로 선언되었을때 객체라고 함

인스턴스 란?
객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 함 객체는 클래스의 인스턴스

클래스는 설계도,객체는 설계도로 구현한 모든 대상
클래스의 타입으로 선언되었을때 객체라고 부르고, 그 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 함

객체의 구성요소

속성(property)
멤버변수, 특성, 필드, 상태

기능(function)
메소드, 함수, 행위

변수와 메서드

종류 선언위치 생성시기

클래스 변수 클래스 영역 클래스가 메모리에 올라갈 때
인스턴스변수 클래스 영역 인스턴스가 생성되었을 때
지역변수 메서드,생성자,초기화블록내부 변수 언어문이 수행될 때

class Sample{
int iv; //인스턴스 변수
static int cv; //클래스 변수 


void method()
{
int lv = 0; //지역변수
}
}

메서드
특정 작업을 수행하는 일련의 문장들을 하나로 묶은것을 의미
1. 높은 재사용성
2. 중복된 코드 제거
3. 프로그램의 구조화

반환타입 메서드이름(타입 변수명, 타입 변수명,...){
}

예)
int add(int a, int b) //선언부
{
int result = x + y; //구현부
return result; //
}

class Tv
{
	//인스턴스 변수
	String color;				//TV색상
	boolean power;		//전원상태(on/off)
	int channel;				//채널
	
	//메서드
	void power()
	{
		power = !power;
		if(power)
		{
			System.out.println("전원켜짐");
		}
		else 
		{
			System.out.println("전원꺼짐");
		}
	}
	
	void channelUp(int a)
	{
		for(int i = 0; i < a; i++)
		channel++;
//		System.out.println("현재 채널은 " + channel + " 입니다.");
	}
	
	void channelDown(int a)
	{
		for(int i = 0; i < a; i++)
		channel--;
//		System.out.println("현재 채널은 " + channel + " 입니다.");
	}
	
	void color(String a)
	{
		color = a;
	}
}

public class MySample1111_2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
        /*
		 * 문제)
		 * 실행순서는 동일하게 하면서 실행결과는
		 * t1의 channel 값은 0입니다.
		 * t2의 channel 값은 0입니다.
		 * t1의 channel 값을 7로 변경했습니다.
		 * t1의 channel 값은 7 입니다.
		 * t2의 channel 값은 7 입니다. 
		 */
		
		Tv t1 = new Tv();
		Tv t2 = new Tv();
		
		System.out.println("t1의 channel 값은" + t1.channel + "입니다.");
		System.out.println("t2의 channel 값은" + t2.channel + "입니다.");
		t1.channelUp(7);
		t2 = t1;
		System.out.println("t1의 channel 값을" + t1.channel + "로 변경했습니다.");
		System.out.println("t1의 channel 값은" + t1.channel + "입니다.");
		System.out.println("t2의 channel 값은" + t2.channel + "입니다.");
        }
 }

출력