도도한 개발자

[Java] #04. 자바의 변수들 본문

Backend/Java

[Java] #04. 자바의 변수들

Kiara Kim 2022. 3. 10. 12:14

   어떤 프로그래밍 언어를 사용하던 내용을 담아 둘 그릇이 필요하다. 그것을 우리는 "변수(Variable)"라고 부르기로 했고 여기에는 항상 이름을 정해줘야 한다.

 

 

* 자바에는 네 가지 변수가 있다.

- 지역변수 (local variables) : 중괄호 내에서 선언된 변수

- 매개변수 (parameters) : 메소드에 넘겨주는 변수

- 인스턴스 변수 (instance variables) : 메소드 밖에, 클래스 안에 선언된 변수. 앞에는 static이라는 예약어가 없어야 한다.

- 클래스 변수 (class variables) : 인스턴스 변수처럼 메소드 밖, 클레스 안에 선언된 변수 중에 타입 선언 앞에 static이라는 예약어가 있는 변수.

 

코드로 예를 들어보면

public class VariableTypes {
   int instanceVariable;	// 인스턴스 변수
   static in classVarible;	// 클래스 변수
   public void method (int parameter) {	//parameter -> 매개 변수
      int localVariable;	// 지역 변수
   }
}

 

다소 복잡해 보이지만 이렇게 구분 짓는 이유가 있다. 각 변수의 용도와 생명주기가 다르기 때문인데 이는 각 변수가 언제 태어나서 언제 죽는지에 따라 구분된다.

 

 

* 변수의 생명 주기

- 지역 변수 : 지역 변수를 선언한 중광호 내에서만 유효하다.

- 매개 변수 : 메소드가 호출될 때 생명이 시작되고, 메소드가 끝나면 소멸된다.

- 인스턴스 변수 : 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 개체가 없으면 소멸된다.

- 클래스 변수 : 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸된다.

 

 

* 자바의 자료형은 크게 두가지로 나뉜다.

기본 자료형과 참조 자료형

 

기본 자료형은 int a = 10; 과 같이 값을 바로 적어주고 참조 자료형은 Calculator calc = new Calculator(); 과 같이 new라는 예약어로 생성을 한다. 참조 자료형 중 딱 하나 초기화할 때 문자열을 다루는 String에 대해 예외가 있다. 

 

String greet = "Hello Java!";

 

처럼 대부분의 개발자들이 위와 같이 초기화한다. 그런데 아래와 같이 정의해도 무방하다.

 

String greet = new String("Hello Java!");

 

기본 자료형는 8가지로 나뉜다.

숫자와 boolean타입. 그리고 숫자는 정수형과 소수형. 다시 정수형은 byte, short, int, long, char. 실수형은 float, double.

자바의 자료형

 

* 기본 자료형의 기본 값

byteDefault = 0
shortDefault = 0
intDefault = 0
longDefault = 0
floatDefault = 0.0
doubleDefault = 0.0
charDefault = 
booleanDefault = false

 

char을 제외한 모든 숫자의 기본값이 0이라는 것을 볼 수 있다. 언뜻 char은 아무것도 없는 것 처럼 보이지만 실제로는 '\u0000'값이 출력된 것이다. 

 

 

* 실습 

 

ProfilePrint 라는 클래스를 만들고 나이, 이름, 결혼 여부를 나타내는 인스턴스 변수를 선언하고 각 변수를 지정하는 메소드와 결과값을 리턴하는 메소드를 만들어 그 결과를 출력하는 프로그램을 만들자.

 

public class ProfilePrint {
	byte age;
	String name;
	boolean isMarried;
	
	public static void main(String[] args) {
		ProfilePrint prof = new ProfilePrint();
		byte age = 25;
		String name = "Kim";
		boolean isMarried = false;
		
		prof.setAge(age);
		prof.setName(name);
		prof.setMarried(isMarried);
		
		System.out.println(prof.getAge());
		System.out.println(prof.getName());
		System.out.println(prof.isMarried());
	}
	
	public void setAge(byte paraAge) {
		age = paraAge;
	}
	public byte getAge() {
		return age;
	}
	public void setName(String paraName) {
		name = paraName;
	}
	public String getName() {
		return name;
	}
	public void setMarried(boolean flag) {
		isMarried = flag;
	}
	public boolean isMarried() {
		return isMarried;
	}
}

 

 

* 정리

 

네 가지 종류의 변수는 어떻게 구분할 수 있나요?

변수의 종류는 변수를 선언한 위치와 static 선언 여부에 따라 달라진다.

 

변수의 이름을 지을 때 대문자로 시작해도 되나요?

일반적인 변수의 이름은 소문자로 시작해야 하며, 
두개 이상의 단어를 나열할 경우에는 두번째 단어의 첫 문자를 대문자로 시작한다.

 

자료형에는 기본 자료형과 어떤 자료형이 있나요?

자바의 타입은 "기본 자료형"과 "참조 자료형"이 존재한다.

 

기본 자료형에는 몇가지가 있나요?

기본 자료형은 byte, short, int, long, float, double, boolean, char의 8가지만 존재한다.

 

기본 자료형 중 정수형에는 어떤 것들이 있나요?

기본 자료형 중 정수형은 byte, short, int, long, char로 총 5가지이다.

 

byte는 몇 비트(bit)로 되어 있나요?

1 byte = 8 bit 이다.

 

byte는 왜 만들었을까요?

byte 타입은 적은 공간에 보다 많은 내용을 저장할 수 있도록 하기 위해서 만들어졌다.

 

int와 long 중 어떤 타입이 더 큰 숫자를 처리할 수 있나요?

정수형 타입의 공간은 byte, short, int, long 순이며, 공간이 넓을 수록 더 큰 숫자를 표현할 수 있다.

 

소수점을 처리하는 타입은 어떤 것이 있나요?

소수점은 float과 double로 처리할 수 있다.

 

char는 정수형인가요?

char도 정수형이다.

 

a라는 것을 char로 정의할 때 어떤 기호로 감싸주어야 하나요?

소수점은 ' 로 감싸야 한다. 여기서 '는 "가 있는 키의 기호이며 키보드의 1 옆에 있는 키가 아니다.

 

true와 false 두개의 값만을 가지는 타입은 어떤 것인가요?

boolean 타입은 true와 false만이 존재한다.

 

그럼 이만.