티스토리 뷰

Chapter 6. 클래스에 대하여

 

▶ 학습 목표

: 클래스가 무엇인지 이해하고 클래스변수 인스턴스변수의 차이에 대해 설명할 수 있다.

 

 

6-2. 클래스와 객체

 

- 클래스

: 객체를 만들기위한 설계도이다.

클래스의 자식으로는 변수와 함수를 가진다. (변수와 함수를 가지고 객체를 생성)

 

*함수는 '함수()'와 같이 표현

 

 

 

 

- 인스턴스

: 클래스를 통해 객체를 만드는 것이다.(new를 사용)

*같은 이름을 가졌지만 값은 다르다. (주소값)

 

 

 

- 클래스의 사용

 

 

package chapter6;

public class 인사직원 
{

	public static void main(String[] args) 
	{
		/*클래스 변수는
		 * 1.클래스이름.변수명 접근가능
		 * 2.참조변수.변수명 접근가능
		 */
		
		int p = 생산직원.price;//파란색 전역변수
		
		생산직원 직원1 = new 생산직원();
		생산직원 직원2 = new 생산직원();
		
		for(int i=0; i<100; i++) 
		{
			String 제품=직원1.제품생산();
			System.out.println(제품); //실행결과 "과자"
			System.out.println("직원1");
			System.out.println(직원1.count);
		}
		
		
		for(int i=0; i<50; i++) 
		{
			String 제품 = 직원2.제품생산();
			System.out.println(제품);
			System.out.println("직원2");
			System.out.println(직원2.count);
		}
	}

}

 

package chapter6;

public class 생산직원 
{
	static int price=100;
	int count=0;
	
	public String 제품생산() 
	{
		count++;
		return "과자";
	}
}

 

생산직원 클래스를 인사직원 클래스에서 참조하여 인스턴스 생성 후 연산.

 

 

 

클래스를 작성한다고해서 클래스를 사용할 수 있는것이 아니다.

실제 클래스를 사용하고자하면 new를 사용하여 클래스의 객체를 생성해야한다.

new를 하는 이유는 변수와 함수를 활용하기 위해서이다.

 

→ 애초에 클래스는 변수와 함수를 가지고 있는 것이기 때문에 new를 하여 다른 클래스는 참조하면 그 다른 클래스의 변수와 함수를 사용하는 것

 

 

클래스명.변수명; //클래스의 객체를 참조할 수 있는 첨조변수 선언
변수명 = new 클래스명(); //클래스의 객체를 생성하고 객체의 주소를 참조변수에 저장
클래스명 변수명 = new 클래스명(); //한번에 선언하는 경우

 

 

참조변수로 인스턴스 접근 방법

변수에 접근할 경우 : 참조변수.변수명
메서드를 실행시킬 경우 : 참조변수.메서드명();

new에 의해 인스턴스가 메모리의 빈 공간에 생성 > 대입연산자에 의해 저장된 메모리의 주소 값이 참조변수에 저장

 

 

 

*call by value

: 일반 변수 데이터를 저장하고 값을 참조

 

*call by reference

: 참조 변수 주소를 저장하여 주소를 참조

 

 

package chapter6;

class Class_practice
{
	
	boolean powerOn;
	String color;
	int wheel;
	int speed;
	boolean wiperOn; //변수 선언
	
	
	void power() {powerOn = !powerOn;}
	void speedUp() {speed++;}
	void speedDown() {speed--;}
	void wiper() {wiperOn = !wiperOn;} //함수
	

}

public class car
{
	
	public static void main(String[] args) {
		
		Class_practice mycar = new Class_practice(); 
		//인스턴스생성 mycar라는 변수에 class_practice의 주소담음 call by reference
		
		System.out.println("시동 처음 초기화 : " +mycar.powerOn); //mycar.powerOn은 mycar의
		System.out.println("차의 색상 초기화 : " +mycar.color);
		System.out.println("바퀴의 수 초기화 : " +mycar.wheel);
		System.out.println("속력 초기화 : " +mycar.speed);
		System.out.println("와이퍼 작동 초기화 : " +mycar.wiperOn);
		
		mycar.power(); //서브함수 호출해서 power()동작 powerOn이 false에서 true가 됨
		System.out.println("시동 메서드 동작 : " +mycar.powerOn);
		mycar.power(); //서브함수 호출해서 power()동작 powerOn이 true에서 false가 됨
		System.out.println("시동 메서드 다시 동작 : " +mycar.powerOn);
		
		mycar.color = "black"; 
        //mycar에 class_practice주소가 담겨 있으므로 class_pracitce 함수의 color변수의 값을 바꿔준다.
		System.out.println("현재 차의 색상 : " +mycar.color);
	}
}

 

 

 

 

6-3. 인스턴스변수와 클래스변수

 

 

- 인스턴스 변수

: 객체마다 각 각 가지는 변수, 각기 다른 값을 가질 수 있다.

 

인스턴스 변수 : n개 생성(여러개 생성 가능)

인스턴스 변수 생성 방법 : new

생성 방법 : 수동(직접 입력해주어야한다.)

 

 

class cars
{
	int speed;  //인스턴스 변수 선언
} //기존 방식과 동일함

 

 

 

 

- 클래스 변수

: 인스턴스 변수와 다르게 모두 공통된 값을 공유해서 가지는 변수이다.

모두 공통된 값을 공유하기 때문에 하나의 변수만 가질 수 있다.

 

클래스 변수 : 1개 생성

클래스 변수 생성 방법 : static

생성 방법 : 자동(앞에 static이 오면 자동으로 이미 생성된 것을 뜻한다.)

 

 

class cars
{
	static int wheel;  //클래스 선언(앞에 static)
}

 

 

 

 

package chapter6;
class cars{
	
	static int wheel=4;  //클래스변수
	int speed;    //인스턴스 변수
	
}


public class Class_practice_3 {

	public static void main(String[] args) {
		System.out.println(cars.wheel);  //클래스 변수 접근 가능
        
        //System.out.println(cars.speed); 인스턴스 변수는 생성하지 않으면 접근할 수 없다.
		
		
		cars mycar1 = new cars();  //인스턴스 생성
		
		System.out.println(cars.wheel);
		System.out.println(mycar1.speed);  
        //인스턴스 생성 후 클래스변수, 인스턴스 변수 둘 다 접근 가능
		
		
		cars mycar2=new cars();
		System.out.println("<변경 전>");
		System.out.println("mycar1.speed : "+mycar1.speed);
		System.out.println("mycar2.wheel : "+mycar2.speed);
		System.out.println("mycar1.wheel : "+mycar1.wheel);
		System.out.println("mycar2.wheel : "+mycar2.wheel);
		
		mycar2.speed=100;
		mycar2.wheel=5;
		System.out.println("<변경 후>");
		System.out.println("mycar1.speed : "+mycar1.speed);  
        //인스턴스변수의 경우 각각 값을 가지기때문에 car1의 값은 안바뀐다.
        //speed는 인스턴스 변수!
		System.out.println("mycar2.wheel : "+mycar2.speed);
		System.out.println("mycar1.wheel : "+mycar1.wheel);  
        //mycar2를 바꿨지만 클래스변수이기 때문에 mycar1도 값이 바뀐다.
		System.out.println("mycar2.wheel : "+mycar2.wheel);
		

	}

}

 

 

 

 

6-4. 메서드

: 함수이다.

파라미터 값을 받아 처리하고 결과 값(return)을 출력하거나 반환한다.

 

 

반환타입 메서드명(타입 변수명, 타입 변수명, ..)
{
	//메서드 내부 동작
	return 값;
}

 

반환 값을 받지않을 경우 void를 사용한다.

그 외는 반환값이 있어야만 한다.

 

 

 

'코딩 > JAVA' 카테고리의 다른 글

[2주차 3일] 변수  (0) 2023.10.18
계산기 프로그램(메서드)  (0) 2023.10.17
배열 값 입력 받아 출력  (1) 2023.10.17
[2주차 1일] Chapter 5. 배열  (1) 2023.10.16
학점 계산기(Scanner, if)  (0) 2023.10.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday