본문 바로가기
프로그래밍 공부/Java

[lesson] Java 프로그래밍 언어 - 자료형 및 변수

by Luna_lua 2021. 7. 21.
반응형

오늘은 Type 즉 자료형을 알아보려 합니다.

 

먼저 자료형은 아래의 표와 같습니다.

위의 자료형만 보면은 어떻게 사용하는지 잘 모를것 같아요~

그럼 위의 자료형을 어떻게 사용하는지 알아볼까요?

 

자료형을 사용하려면 그전에 변수라는 내용을 알아야 합니다.

 

--------------------------------------------------------------------------------------------------------------------------------

변수(Variable)란 데이터를 저장하는 저장공간입니다. 따라서 변수를 선언하면 변수의 타입에 맞는 메모리 공간이 할당되고, 변수에 저장된 값은 프로그램 수행 중에 계속 바꾸거나 사용할수 있습니다.

 

메모리에 공간이 할당되고 그곳에 값을 넣었다가 빼고, 바꾸는데 어떻게 바꾸는걸까요? 바로 주소(해시코드)를 통해 메모리 공간을 찾아갑니다. C언어에서는 포인터라고 부르기도 하죠~

 

예를 들어 int x= 10;이라고 적었습니다.

처음 보시는 분들을 위해 풀어보자면,

1. 위에서 타입을 보시면 int 즉, 정수형의 값을 받을 수 있는 타입!

2. x는 변수의 이름

3. = 10 (여기서의 =는 수학적으로 같다의 의미가 아닌 대입연산자(추후 따로 설명 예정입니다.) 로서 집어 넣는다라는 의미로 봐야합니다.) [정수인 숫자 10을 집어 넣는다 라는 의미로 봅니다.]

4. 내용을 합치면 x라는 이름의 정수형 타입 변수에 숫자 10을 넣는다! 라는 의미입니다.

 

다시 메모리적 관점에서 본다면 x라는 이름의 저장공간이 할당되면 고유한 값인 주소값이 부여됩니다.
계속 실행되고 종료되는 프로그램이 있기 때문에, 주소값은 변경될 수 있으나 중복은 될 수 없습니다.

 

변수는 저장공간이라고 했지만 그 저장공간의 값을 의미 할 수도 있기때문에 구분을 잘 해주셔야 합니다.

아래의 예시를 보고 구분해보시면 더욱 이해가 잘 될 것 같습니다.

 

1. int data =20;  // 여기서의 data는 저장공간 (data라는 저장공간에 숫자 20을 넣는다.)

2. data = 30;  // 여기서의 data는 저장공간 (마찬가지로 정수형 data에 30을 넣는다.)

   [int data라고 안써져 있는데 정수인지 어떻게 알까요? int data;라고 먼저 선언한다면,   

    다음부터는 data라고만 변수를 부르면 되기 때문입니다.]

3. System.out.print(data + 9);  // 여기서의 data는 값 (data에 들어있는 값과, 9를 더해서 출력하라는 의미)

4. data = data + 7;  // 왼쪽(편의상 1번)의 data는 저장공간, 오른쪽(편의상 2번)의 data는 값

                           // (data(2번)에 있는 값과 7을 더하여 data(1번)에 넣으라는 의미,

                               편의상 1,2로 구분했지만 코드에서는 동일한 data변수입니다.)

5. data -9;  // 여기서의 data는 값 (data에 있는 값과 9를 빼라)

 

★Point! 저장공간의 구분은 대입연산자(=) 또는 타입이 있으면 됩니다!!

 

변수의 이름을 우리가 지어줄 수 있지만 이름 선언시 주의해야할 사항들이 있습니다.

 

<변수 선언 시 주의 사항>

1. 같은 이름의 변수가 있을 수 없다.

2. 변수 선언시 초기화를 해준다.

   (ex : int x = 10; 아까 변수를 만들면 메모리에 공간이 할단된다고 했는데 그 공간에 전에 있던 내용이

         들어있을 수 있기 때문에 초기화(값을 넣어줌)를 해주어야 한다.

넣어줄 값이 없다면 기본값을 넣어 주어야 한다.

 

!초기화시 들어가는 기본값!

1. boolean : false

2. char : '\u0000'

3. byte, short, int, long : 0

4. float : 0.0f

5. double : 0.0 또는 0.0d

6. String : null

 

<변수명 주의 사항>

1. 문자로 시작해야 한다.
2. 특수문자는 사용할 수 없다. 단, _는 허용한다.
3. 되도록 소문자만 사용한다.
4. 공백을 사용할 수 없다. (2단어 이상의 이름을 조합하여 사용한다면 아래의 방식으로 이름을 만들어 준다.)
- good_boy
- goodBoy(추천) : 카멜 표기법
5. 되도록 한글은 사용하지 않는다.
6. 명사로 사용한다.
7. 뜻이 있는 단어를 사용한다. (어떤 사용용도로 쓰는 변수인지 이름으로 알아보기 위함)

 

 

변수를 사용하는 이유는 2가지가 있습니다.

1. 반복되는 값을 쉽게 관리 하기 위해서

2. 값의 의미 부여를 하기 위해서 (자료 구조 관점)

 

 

-------------------------------------------------------------------------------------------------------------------------

변수의 값을 계산하다보면 정수 타입을 항상 정수타입으로만 계산할 수 없습니다.

예를 들어 키가 180이었는데 한달사이에 0.5가 커져 값이180.5로 바뀌어야 합니다. 이럴때는 어떻게 될까요?

 

형변환에는 자동 형변환과 강제 형변환이 있습니다.

 

위의 예시는 자동 형변환으로 값이 알아서 실수로 바뀌어 저장이 됩니다.(변수타입이 실수이어야 한다)

정수 와 정수를 계산하면 정수가 나오고, (정수 + 정수 = 정수)

정수 와 실수를 계산하면 실수가 나오고, (정수 + 실수 = 실수)

문자 와 정수를 계산하면 정수가 나옵니다. (정수 + 문자 = 정수)

이렇게 자동 형변환이 되니까 이 값을 받아주는 변수는 결과값의 타입과 맞아야 하겠죠?

 

강제 형변환이란 무엇일까요? 바로 계산이 아닌 값을 강제로 타입을 바꾸는것을 말합니다.

(double) 3 -> 정수형 숫자 3을 강제로 double인 실수타입으로 형변환! 값은 3.0이 된다.

 

★Point! 이 형변환은 나중의 업/다운 캐스팅(Casting)에서 비슷하게 동작하니 알고 계시면 좋을듯 합니다.

 

+)

<변수의 종류>

지역변수 (local variable) : 기본 변수 선언 : 클래스 중괄호영역은 포함되지 않는다.

                                                   (클래스 중괄호 안의 중괄호들을 의미)
매개변수 (parameter) : 메소드 : 메소드의 소괄호에서 선언된다.
전역변수 (global variable) : 클래스 중괄호영역(바디)에서 선언된 변수.
정적변수 (static variable, class variable) : 객체간 공유, 편의성 (컴파일시 자동으로 할당을 시켜줌) , 

                                                                                 (객체로 접근하는게 아니라 클래스로 접근하기 때문에 클래스변수라고 한다.)

 

+)

저장 기억 부류(Storage class)

전역과 정적은 생명주기가 종료되지만 직접 지울수 없고, JVM의 가비지 콜렉터가 바로 지우는것이 아닌 

순서를 정해놓고 메모리가 필요할때 지웁니다.

반응형