[혼공자] 02-1. 변수

Benjamin·2023년 2월 10일
0

혼공자

목록 보기
4/27

02. 변수와 타입

컴퓨터 메모리(RAM)는 값을 저장할 수 있는 수많은 번지(주소)들로 구성되어있다.

02-1. 변수

변수

  • 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름
  • 프로그램은 변수를 통해 메모리의 특정 번지에 값을 저장하고 읽을 수 있다.

변수를 선언하고 변수에 값을 저장하면, 메모리에 값이 저장된다.
메모리의 어디에 저장하고, 어떤 방식으로 저장할지는 프로그래밍 언어와 운영체제가 정한다.
-> 자바의 경우 JVM이 하는 일

특정 타입에는 해당 타입의 값만 저장할 수 있고, 하나의 변수에는 하나의 값만 저장할 수 있다.

변수 선언

변수에 어떤 타입(자료형)의 데이터를 저장할 것인지, 변수의 이름은 무엇인지 결정하는 것

타입

변수에 저장되는 값의 종류와 범위를 결정짓는 요소
같은 타입의 변수는 ','를 사용해 한꺼번에 선언할 수도 있음

int x;
int y;

int x, y; //위에 따로 선언한것과 동일

변수 이름

자바언어에서 정한 명명규칙 따라야함

  • 첫 번째 글자는 문자이거나 '$','_'이어야하고, 숫자로 시작할 수 없음(필수)
  • 영어 대소문자를 구분(필수)
  • 첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로(관례)
  • 문자 수(길이)의 제한은 없음
  • 자바 에약어는 사용할 수 없음(필수)

어떤 값을 저장하고있는지 알 수 있도록 의미있는 이름 지어주는것이 좋음
변수이름의 길이는 프로그램 실행과는 무관하기때문에 충분히 길어도 상관없음
한글을 포함하지 않는것이 좋음

예약어

이미 해당 프로그래밍 언어에서 의미를 갖고 사용되고 있는 단어
변수이름으로 사용할 수 없음 -> 사용할 경우 컴파일 에러 발생

분류예약어
기본 타입boolean, byte, char, short,int,long,float,double
접근 제한자private,protected, public
클래스와 관련된 것class, abstract, interface, extends, implements, enum
객체와 관련된 것new, instanceof, this, super, null
메소드와 관련된 것void, return
제어문과 관련된 것if, else, switch, case, default, for, do, while, break, continue
논리값true, false
예외 처리와 관련된 것try,catch,finally,throw,throws
기타package, import, synchronized, final, static

값 저장

변수에 값을 저장할때는 대입 연산자(=) 사용 : 오른쪽의 값을 왼쪽의 변수에 저장한다는 의미

자바에서는 변수에 값이 저장되지 않으면 변수가 생성되지 않는다.
선언과 생성은 다른 이야기!

변수 선언은 저장되는 값의 종류와 이름만 언급한 것.
변수에 최초로 값이 저장될 때 변수가 생성된다! = 변수 초기화
-> 변수 초기화에 사용된 값 = 초기값

변수가 초기화되면 메모리 번지 정보를 갖게되고, 해당 메모리 번지에 값이 저장됨
int score = 90;

초기화되지 않은 변수는 아직 메모리 번지 정보를 가지고있지 않으므로, 변수를 통해 메모리 값을 읽을 수 없다.

잘못된 코딩

int value; // 변수 선언되었지만, 초기화되지 않음
int result = value +10; // value변수는 아직 존재하지않음  -> 컴파일에러 발생 

변수 사용

변수는 출력문이나 연산식 내부에서 변수에 저장된 값을 출력하거나 연산할 때 사용한다.

println() 메소드의 매개값에 변수를 사용하면, 변수에 저장된 값을 사용해서 출력한다.

메소드 = 어떤 일을 처리하는 실행문들을 모아놓은 블록

산술연산식에 변수를 사용하면 저장된 값으로 연산을 수행한다.

변수는 또 다른 변수에 대입하여 값을 복사할 수 있다.

int x = 10;
int y = x; // x에 저장된 값을 변수 y에 복사(저장)

변수 사용 범위

자바의 모든 변수는 중괄호 {} 블록 내에서 선언되고 사용된다.

로컬변수

  • 메소드 블록 내에서 선언된 변수
  • 메소드 블록 내부에서만 사용되고, 메소드 실행이 끝나면 메모리에서 자동으로 없어진다.

변수는 블록 내 어디에서든 선언할 수 있지만, 변수 사용에는 제한이 따른다.
변수는 자신이 선언된 위치로부터 자신이 속한 블록 내부에서만 사용할 수 있다.

메소드 블록 내에는 다른 중괄호{} 블록들이 작성될 수 있다.
ex) if(){}, for(){}, while(){} ...
-> 이런 중괄호 {} 블록 내에서 선언된 변수는 해당 중괄호{} 블록 내에서만 사용가능하고, 밖에서는 사용할 수 없다.

변수 선언 시 주의할 점

  • 변수가 어떤 범위에서 사용될 것인지를 생각하고, 선언 위치를 결정해야한다.
  • 메소드 블록 전체에서 사용하고싶다면 메소드 블록 첫머리에 선언한다.
  • 특정 블록 내부에서만 사용된다면 해당 블록 내에 선언한다.
int v1 = 15;
if(v1>10) {
	int v2;
    v2 = v1 - 10;
}
int v3 = v1 + v2 + 5; // v2 변수를 사용할 수 없기때문에 컴파일 에러 발생

컴파일 에러명 = v2 cannot be resolved to a variable = 변수 v2를 해석할 수 없다


출처
혼자 공부하는 자바

0개의 댓글