본문 바로가기
코딩수업/AWS 클라우드환경 네이티브

7/29 자바(Java) 클래스와 객체 (참조 변수의 이해, Static )

by 인생즐겜러 2022. 7. 29.
728x90
반응형

AWS 클라우드환경 네이티브 수업 54일차

 

 

 

진행

1. 배열 연습 문제 - 로또 번호 뽑기( 7/27 에 포함시킴 )

2. 클래스와 객체

 

 

 

 

 

요약

1. 클래스와 객체

(클래스와 객체 선언, 참조 변수의 이해, Static )

 

 

 

 

 


 

 

 

 


클래스와 객체

 

클래스 :  레시피

객체 :  레시피를 이용해서 똑같이 만든 음식들

인스터스 : 각각의 음식

 

 

 

예시를 들어서 이해를 해보자.

 

 

 

우선 클래스 이해를 위한 패키지를 새로 만들것이다.

아래와 같이 패키지를 4개를 만들고

 

오른쪽 상단에 있는 세로 ... 을 클릭 - package presentation - hierarchical 을 누르면

object. 으로 된 패키지가 object의 하위로 종속된다.

 

 

 

 

아래는 만든 패키지 안에 클래스를 만들고

새로운 클래스를 코딩한 예이다.

기존에 있는 main 메소드를 포함한 클래스 위에

새로운 클래스(Tv)를 선언했다.

java 파일 안에 클래스가 여러개가 있다면 컴파일 후

클래스 갯수만큼 파일이 생성된다. (아래 그림 - Tv.class / TvExam.class)

참고로 java 파일 이름과 동일한 이름의 클래스 선언에만 public 접근 제한자를 붙일 수 있다.

 

 

 

 

 

 

아래는 클래스 선언, 객체 선언, 객체의 변수 활용의 예이다.

 

클래스와 객체, 변수 활용의 이해.



package object.tv1;

// class Tv
// 클래스 선언
class Tv {
	
	// 변수 선언
	String color ;
	boolean power ;
	int channel ;
	
	// 함수
	void power() {	power = !power ; } // Tv를 껐다 키는 기능
	void channelUp() {	++channel ; } // 채널을 1 올린다.
	void channelDown() {  --channel ; } // 채널을 1 내린다. 
	
}



// class TvExam
public class TvExam {

	public static void main(String[] args) {
		
		// 객체(인스턴스) 만들기
		Tv	t;	// Tv를 가르키는 참조변수 선언. 데이터 타입은 class
		t = new Tv();	// Tv를 새로 복사할건데 t라는 이름으로 만들거야.
		
		t.channel = 11;	// 새로 만든 Tv(t)에 있는 channel 변수를 가져온다.
		System.out.println("현재 채널은 " + t.channel + " 입니다.");
		
		t.channelDown();
		System.out.println("현재 채널은 " + t.channel + " 입니다.");
		
	}
}

 

 

 

 

 


 

 

 

 

 

class 타입은 참조 변수이다.

따라서 값을 가지고 있지 않고 주소값을 가지고 있다.

아래의 경우, t2의 주소를 t1의 주소값으로 덮어버림으로써

t1의 값을 바꿨을 뿐인데 t2의 결과물도 변하는 결과를 볼 수 있다. 

 

참조 변수의 이해.



package object.tv3;


//class Tv
//클래스 선언
class Tv {
	
	// 변수 선언
	String color ;
	boolean power ;
	int channel ;
	
	// 함수
	void power() {	power = !power ; } // Tv를 껐다 키는 기능
	void channelUp() {	++channel ; } // 채널을 1 올린다.
	void channelDown() {  --channel ; } // 채널을 1 내린다. 
	
}

public class TvExam {

	public static void main(String[] args) {
		
      		  // 객체 만들기
		Tv t1 = new Tv();
		Tv t2 = new Tv();
		
		
		t2 = t1 ;	// 주소가 t1으로 다 덮여 씌워진다.
		t1.channel = 11;	// t1의 값이 바뀜. 
		
		System.out.println("t1 채널은 " + t1.channel + " 입니다.");
		System.out.println("t2 채널은 " + t2.channel + " 입니다.");

	}

 

 

 

 

 


 

 

 

 

 

Static 을 붙이게 되면 아래처럼

객체를 따로 생성하지 않더라고 바로 변수를 가져다가 사용할 수 있다.

그렇지 않은 변수는 아래처럼 에러가 발생하는 걸 볼 수 있다.

 

 

 

 

 

 

아래의 경우, static의 특성을 보여준다.

각각 다른 인스턴스의 클래스 변수 값을 11 / 33으로 변경했는데

변경한 값이 c1에도 c2에도 똑같이 적용된 것을 볼 수 있다.

이처럼 static으로 선언이 된 변수(클래스 변수)는 인스턴스끼리 모두 공유하는 것을 알 수 있다.

 

 

 

728x90
반응형

댓글