JAVA 변수에 관해

728x90

본 포스팅은 IT 교육기관인 KIC 캠퍼스의 지원을 받은 리포트입니다.

본문은 '남궁성, JAVA의 정석 3rd Edition' 교재를 공부하면서 주요 내용을 요약하고 있습니다.
혹시 잘못되거나 문제 소지시 댓글 남겨주시면 조치하겠습니다.


< 변수란? >
※ 일반적인 의미의 변수란 상황을 바꿀 수 있는 '변하는 수'라고 지칭되지만 프로그래밍 세계에서는 보통 '특정 값을 저장할 수 있는 메모리 상의 공간'을 뜻함. 즉. 변수 하나에는 하나의 값만 저장할 수 있기 때문에 새로운 값을 저장하면 기존의 변수에 저장된 값은 소멸하게 됨.

< 변수의 기본 구조 >
int age = 25;

int = 변수의 타입
age = 변수의 이름
25 = 변수에 저장된 값. 즉 age라는 변수에 저장된 값이 25라는 뜻
; = 하나의 문장이 끝난 것을 뜻함.

< 변수 사용 예시 >
변수 year에 2017을 부여하고 / 변수 age에 14를 부여하고자 할 때

package pack1;

public class Practice {

public static void main(String[] args) {
int year = 0;
int age = 14;

System.out.println(year);
System.out.println(age);

}
}


< 변수 사용 예시 결과 >
year와 age에 부여된 변수 값이 2017과 14가 출력되었다
System.out.println(변수명); 은 입력한 코드를 출력하기 위한 문장이다. 추후에 좀 더 자세히 설명하고 일단은 이렇게만 외워둔다.

2017
14


< 변수의 명명규칙 >
  1. 대소문자는 구분되며 길이에 제한은 없다.
  2. 예약어는 사용해서는 안된다. (예시 : true는 불가 / True는 가능)
  3. 숫자로 변수가 시작되어서는 안된다 (예시 : top10은 가능하지만 10top은 변수 사용 불가)
  4. 특수문자는 _ 와 $만을 허용한다 (예시 : JAVA_HOME$STAR는 가능 JAVA@HOME#은 사용 불가)
  5. 클래스 이름의 첫문자는 항상 대문자로 사용
  6. 여러단어로 이뤄진 이름은 단어의 첫문장을 대문자로 한다 (예시 : SeaOcean이나 CarTire 같은 형식)
  7. 상수의 이름은 모두 대문자로 한다 (예시 : PI, MAX_NUMBER)
     5번, 6번, 7번 규칙은 필수가 아닌 암묵적인 규칙이지만 모두 이 규칙을 지키려하기 때문에 가능하면 규칙을 따르자

< 변수의 타입 >
변수에 사용하는 값의 종류는 우선 문자와 숫자로 나뉠 수 있으며, 숫자는 정수와 실수로 구분할 수 있다.

값  ----- 문자 A,B,C,D,Z 등
     ----- 숫자 ----- 정수 : 1, 5, -12 등
                    ----- 실수 : 3.14, -3.0X10^8 등

이렇게 종류에 따라 값이 저장될 공간의 크기와 저장형태를 정의한 것을 자료형(data type) 변수라고 한다.
자료형은 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 등이 있다.
다양한 형태가 있기 때문에 변수에 저장하고자 하는 값의 형태를 고려해서 변수를 선택할 필요가 있다.

그리고 자료형은 크게 '기본형'과 '참조형'으로 나눠지는데 기본형 변수는 실제 값이 변수에 저장되는 반면 참조형 변수는 어떤 값이 저장되어 있는 주소(address)를 값으로 갖는다.  경찰서에 있는 경찰차의 대수를 변수로 삼는다고 가정한다면 아래와 같은 느낌이 될 것이고 종류 역시 아래에 서술하였다.

- 기본형 변수는 이런 느낌 -
GANGNAM_POLICE_CAR : 12대

- 기본형 변수(primitive type) 종류 -
논리형(boolean), 문자형(char), 정수형(byte,short,int,long), 실수형(float,double)

- 참조형 변수는 이런 느낌 -
GANGNAM_POLICE_CAR : 서울 강남구 테헤란로114길 11, 강남경찰서 경찰차 주차장

- 참조형(reference type) 변수 종류 -
위의 기본형 변수를 제외한 나머지 타입

물론 실제 변수는 이렇게 12대나 한글 주소가 아닌 영어나 숫자로만 적힐 것이다.

< 기본형 변수의 종류 >
기본형 변수는 모두 8개의 타입이 있다.

논리형 [boolean]
true나 false 중 하나를 기본값으로 가지며, 논리적 계산이나 조건식에 주로 활용

문자형 [char]
문자를 저장하는데 사용되며, 변수에 하나의 문자만 저장 가능.

정수형 [byte, short, int, long]
정수를 저장하는 데 주로 사용되며 int가 가장 많이 쓰인다. byte는 이진 데이터를 다룰 때 사용되며, short는 C언어와의 호환성을 위해 추가된 변수

실수형 [float, double]
정수(2,-4)가 아닌 실수(3.14, 10x2^6)를 저장하기 위해 사용되며 주로 사용되는 건 double


기본형 변수의 종류 및 크기는 반드시 외워야 함


< 상수와 리터럴 >
상수(constatn)는 변수와 마찬가지로 값을 저장하는 공간이지만 한번 저장하면 수정할 수 없다.
상수를 선언하는 방법은 변수의 타입 앞에 final를 붙여주기만 하면 된다. 리터럴(literal)은 상수의 변하지 않는 값 자체를 의미한다.

final int SPEED = 120;

final : 상수임을 정의함, 즉 SPEED 변수의 120값이 바뀔 수 없다는 걸 의미
int : 정수형 변수
SPEED : 임의로 붙인 변수명. 120km로 달리는 변수라 치자...
120 : 변하지 않는 값. 즉, 리터럴
; : 문장을 끝나는 것을 의미함


< Scanner를 활용하여 키보드 타이핑 내용을 입력받기 >
Scanner 클래스를 활용하여 키보드로 입력된 내용을 입력하는 방법
문장 뒤에 //xxxx는 주석을 달 때 쓰는 방법이다. 추후에는 설명을 // 주석 형태로 할 예정
문장을 감싸주는 { }에 대해 살펴보자 양파의 껍질을 또다른 껍질이 싸듯이 겹겹히 쌓여 있는 것을 볼 수 있다.
잘 모르겠으면 { 가 있는 문장의 색깔을 살펴보자. 맨 아레에 } 가 2개가 있지만 색상이 다른 것을 볼 수 있다.
즉, A{ ABC{E} } 와 같은 형태로 문장이 구성된다.


package pack1; // pack1이라는 패키지 내부에 있다는 것을 선언. 패키지는 일종의 자바 파일을 모아놓은 폴더라고 우선 생각하자.

import java.util.Scanner;    // Scanner 클래스를 사용하기 위한 선언. 프로그램을 로딩한다고 생각하자.

public class Practice { // 클래스 전체를 감싸주는 문장

public static void main(String[] args) { // 문장의 시장과 끝을 뜻함. 일단은 이렇게만 알고 넘어가자.

Scanner scanner = new Scanner(System.in); // Scanner 클래스의 객체를 생성
System.out.print("숫자를 입력해보세요"); // 사용자가 숫자를 입력할 수 있도록 화면에 출력하는 역할. 그러니까 그냥 안내판
String input = scanner.nextLine(); // 입력받은 내용을 input 변수에 저장하게 된다.
int num = Integer.parseInt(input); // 입력받은 내용의 input 타입의 값으로 변환한다. 만약에 이 문장이 없으면 숫자들 문자든 다 받게 된다.

System.out.println("입력내용 :" + input); // input에 입력된 값을 출력한다.

}
}


- 출력 결과 -

숫자를 입력해보세요 : [키보드로 입력한 숫자]
입력내용 : [키보드로 입력한 숫자]


< 진법 및 파일의 크기 >
진법은 원칙만 알고 있으면 구구단 같이 계산하면 되기 떄문에 그렇게 어렵지 않다. 아래의 링크를 참고하자




< 기본형 변수의 종류 및 예시 >
  1. 논리형(boolean) : 논리형에서 사용, true냐 false인지를 정의하고 저장한다. 즉 이 변수가 취할 수 있는 건 맞다, 틀렸다 밖에 없다.


     boolean power = true;
     boolean power_check = False // 에러. 대소문자 구분을 하기 때문에 False는 쓸 수 없다.


  1. 문자형(char) : 문자를 저장하기 위한 변수. 단 하나의 문자만을 저장할 수 있다. 그리고 진법을 배웠으면 알겠지만 A를 A로 저장하는 것이 아닌 유니코드 값인 65로 변환하여 저장하기 때문에 A를 쓰나 65를 쓰나 값은 동일하다

     char ch = 65;  // 숫자 '65'를 char 타입의 변수 ch에 저장

     char ch = 'A';  // 문자 'A'를 char 타입의 변수 ch에 저장
     int code = (int)ch;  // ch에 저장된 A를 int(정수) 형태로 변환


< 특수 문자 사용법 >
코드를 작성하다보면 줄 내림 등 특수 문자를 사용하고 싶은 경우가 있는데 이는 아래와 같다.


< 정수형 변수의 종류 >
정수형 변수는 앞서 말한 것처럼 숫자를 저장하는 것이며 타입에 따라 저장할 수 있는 범위가 다르다. 그냥 모두 쓸 수 있는 변수를 쓰면 되지 왜 종류를 나눈 것인가 하면 일반적인 사용 경우엔 별 문제가 없지만 우주선이나 비행기 같이 IoT 같은 디바이스에 들어가는 프로그램은 용량 등 모든 것을 최적화 해야 되기 때문이다. 계산에 필요한 범위가 -10~10 인데 -128000 ~ 128000을 지원하는 변수는 궂이 쓸 필요가 없는 것이다. 자세한 내용은 아래 링크를 참고하자. 데이터 형식 범위에 대한 글이 나와 있다. 종류는 byte, short , int, long 이렇게 4가지 종류가 있다.


그리고 변수에 할당된  최대 값을 초과하였을 때 생길 수 있는 현상인 '오버플로우(OverFlow)'에 대한 글은 아래를 참고하자.


< 실수형 변수의 종류 >
실수형 변수에는 float와 double이 있다. 이 변수들이 표현할 수 있는 데이터 범위는 아래 링크를 참고하자.


< 형변환(casting)에 관해 >
모든 변수와 리터럴에는 타입이 있다는 것을 앞에서 설명하였다. 그리고 프로그램을 작성하다보면 서로 다른 타입간의 연산을 수행해야 하는 경우도 있을 것인데 이를 위한 수행 과정을 형변화, 즉 casting이라고 한다. 앞에서 문자 A를 유니코드 65로 변환한 것이 일종의 형변환 과정이다.


double d = 65.3 // 변수 d에 65.3의 실수를 입력
int score = (int)d; // d에 입력된 실수 65.3을 정수로 입력

이렇게 하면 실수 65.3에서 소숫점 1자리를 떼버리고 정수형 값으로 변환해서 출력하게 된다.
다만 유념해야 될 것은 실제로 떼어버리는 것은 아니고 뗀 것처럼 보이게 만들 뿐이다.




728x90

'DEV' 카테고리의 다른 글

JAVA 조건문과 반복문  (0) 2018.01.10
JAVA 연산자 요약  (0) 2018.01.09
JAVA 메모장 예제  (0) 2018.01.09
JAVA 상하좌우 키보드로 이미지를 이동시키기  (0) 2018.01.09
JAVA 미디어(WAV) 재생 예제  (2) 2018.01.09
JAVA 설치 및 환경변수 세팅 방법  (0) 2018.01.05