- Storage Class (저장 기억 부류)

지역 변수 : 메소드 내부에 선언된 변수

전역 변수 : 클래스 내부에 혹은 메소드 외부에 선언된 변수

정적 변수 : static이 붙은 변수

 

종류 지역 변수 전역 변수 정적 변수
초기화 직접 자동 자동
생명주기 {} (중괄호) 내에서 프로그램 종료 전 프로그램 종료 전
보안성

여기서 보안성은 접근하기 어려운 정도를 의미한다.

 

여기서 static변수는 static이 붙은 메소드에서 사용이 가능하다. 다른 메소드에서는 사용할 수 없다.

그리고 static이 붙은 메소드 내부에서는 일반 전역 변수를 사용할 수 없다.

 

메소드 내에서 선언된 지역변수는 전역 변수보다 우선시되기 때문에 이름이 같은 변수가 있다면, 지역변수를 우선으로 사용한다.

 

 

- static 변수 사용 예시

	int data1 = 10;
	static int data2 = 20;

	public static void main(String[] args) {
		System.out.println(data2);
// 일반전역변수는 static메소드 내에서 사용할 수 없기 때문에 오류가 난다.
//		System.out.println(data1); ->  오류
	}

 

- 클래스 

공통된 요소들을 하나로 묶어놓은 틀

여러 변수들과 메소드들을 둘 다 관리하고 사용하기 위해 설계해서 사용한다.

 

 

1. 주어이다.

모든 문장 맨 앞에 클래스가 나오고, 영어는 맨 앞을 대문자로 적는다.

따라서 클래스는 주어이고, 대문자로 시작한다.

String food = "banana";
Monkey.eat(food);
[주어] [동사] [목적어]  // 주어 : 클래스, 동사 : 메소드, 목적어 : 변수

 

 

2. 타입이다.

클래스는 추상적인 개념으로, 클래스 안에는 필드가 존재한다.

추상적인 것을 바로 사용할 수 없기 때문에 그 필드들을 구체화시킨 대상이 필요하다.

 이를 "객체"라 부르고 instance variable이라고 한다.

 

※ instance 

예, 예시라는 의미이다. 추상적인 개념의 한 예시로서 객체가 나오기 때문에 instance variable이라 부른다.

(자동차인데 예를 들어 내 차이다.)

[클래스]                   [객체]

 

추상적인 개념의 클래스를 가지고 찍어내서 객체를 만드는 작업"객체화" 라고 한다.

따라서 클래스는 그 때 찍어내는 객체의 타입이다.

 

 

- 클래스의 선언

class 클래스명 {
    필드선언 (변수, 메소드)
}

 

 

- 클래스의 사용

클래스는 추상적인 틀이기 때문에 먼저 객체화를 진행해야 한다.

클래스명 객체명 = new 클래스명();  // 필드만들기
객체.변수
객체.메소드

하나의 저장공간에는 단 한 개의 값만 담을 수 있다.

필드에는 여러개의 값이 존재하기 때문에 필드는 다른 곳에 할당되고 할당된 필드의 주소 값을 저장하는 것객체이다.

 

 
클래스 보충 설명 그림

(1) Car 클래스 : mycar, momcar에 쓰일 공통적인 변수, 메소드를 선언한 틀

(2) mycar 객체 : Car 클래스의 틀을 가지고와서 mycar 객체를 만들어 mycar필드를 만들어 준다.

이 필드가 저장된 주소를 100번지라고 가정 했을 때, 100번지 주소의 brand, color, price와 메소드 start(), stop()이 존재한다.

(3) momcar 객체 : 위의 mycar객체와 동일하게 구성되지만, 주소가 다르다.

 

 


실습 해보기 !

Car 클래스를 만들고, mycar객체로 사용하기

 

 

Car 클래스

class Car {
	// 클래스 만들고 필드에 공통으로 쓰이는 변수, 메소드 선언
	String brand;
	String color;
	int price;
	
	void engineStart() {
		System.out.println("시동 켜기");
	}
	
	void engineStop() {
		System.out.println("시동 끄기");
	}
}

 

 

mycar로 객체 생성, 메인메소드 

public class ClassTest {
	public static void main(String[] args) {
		// 객체만들기
		Car mycar = new Car();
		mycar.brand = "Ferrari";
		mycar.color = "RED";
		mycar.price = 65000;
		
		System.out.println(mycar.brand);
		mycar.engineStart();
		mycar.engineStop();
		
	}
}

 


- 생성자

클래스명 뒤에 소괄호로 만들어진다.

생성자는 메소드와 똑같이 활용 가능하다.

하지만 필드를 생성해주고 주소 값을 돌려주기 때문에 메소드라 부르지 않는다.

주소값을 자동으로 (내부적으로) 리턴하고 있기 때문에 리턴을 직접 할 수 없다.

 

클래스 선언 시 자동으로 생성자가 만들어지고 코드상에는 나타나지 않는다.

이런 생성자를 "기본 생성자"라고 하며, 만약 직접 생성자를 선언하게 되면 기존에 있던 (코드상에 보이지 않는) 기본 생성자는 사라지게 된다.

 

 

- 생성자의 목적

  1. 클래스의 필드를 똑같이 복사해서 메모리에 할당해주고 할당된 필드의 주소 값을 가지고 온다. 이 주소값을 객체 담아놓고 사용한다. (객체화의 목적)
  2. 생성자는 호출 시 내부의 내용을 모두 수행한다. (초기화의 목적)

 

 

 

복사했습니다!