
3. 변수(Variable)
메모리(RAM)에 값을 기록하기 위한 공간
사람 이름 등 불특정한 값을 가져오기 위한 목적으로 생긴 원리로 공간을 미리 마련해둘 수 있음.
1) 변수 사용하기
변수 선언
유한한 메모리 공간에 지정된 타입의 데이터를 저장할 수 있는 공간을 할당하는 것
자료형 변수명; → 변수 타입 지정 + 변수명 지정 + 마침
값 대입과 리터럴
- 값 대입: 생성한 변수(저장 공간)에 값을 대입하는 것 → 한 개의 데이터, 마지막 대입 값만 보관
- 변수에 이미 저장된 값도 새로운 변수에 저장할 수 있다
- 리터럴: 변수에 대입되는 값 자체
변수 초기화(initialize)
변수를 사용하기 전에 처음으로 값을 저장하는 것
지역변수local variable (메소드 안 변수)는 반드시 초기화 해야 사용 가능
참조변수는 null로 선언 가능.
변수 명명 규칙
회사에서 별도로 지정되어 있을 수도 있음.
- 숫자로 시작 불가
- 공백, 예약어 사용 불가
- 소문자로 시작하는 낙타 표기법(carmel case)
- 첫 번째 단어는 소문자로 시작하고 그 이후 각 단어는 대문자로 시작 → 대소문자 구분
- 의미가 있는 내용으로 기억하기 쉽게 명명하는 것이 일반적.
- 길이 제한은 없음.
- 특수 기호는 언더바(_)와 달러($)만 사용 가능
- 같은 영역에 있을 때는 중복되면 안됨
2) 변수 타입
★ 기본 자료형

-
- char는 문자임에도 정수 타입에 포함됨 ⇒ 작은 따옴표(’)
- String은 글자가 몇 개 올지 모르기 때문에 참조 타입 ⇒ 큰 따옴표(”)로 감싸면 자바는 문자열로 인식함
- 개행된 문자열 문단을 출력하고 싶을 때 “””를 사용할 수 있다
- String test2 = """ <html> <head> </head> <body> <h1> 안녕 %s 나이는 %d짤 님아 방가방가 </h1> </body> </html> """;
- float와 long은 해당 타입의 값이라는 것을 표현하기 위해 알파벳이 붙어야 함 → 그냥 숫자만 입력하면 자동으로 int와 double로 인식되기 때문변수 타입에 따라 변수에 저장할 수 있는 값의 종류와 허용 범위가 달라짐
기본타입 정수 타입 byte, char, short, int, long 실수 타입 flout, double 논리 타입 boolean 참조타입 기본 타입을 제외한 배열, 열거, 클래스, 인터페이스 등
★ 참조 자료형
: 객체의 번지를 참조하는 타입으로 클래스 객체이다.
- 참조형은 대부분 16바이트이므로 원시형에 비해 크기가 크다
- 실제 데이터가 있는 주소를 참조하고 있으므로 실제 데이터에 접근하기 위한 부가 작업이 추가로 필요하다
⇒ 원시형보다 속도가 느리다 (코딩 테스트에서는 원시형이 유리)
⇒ 값끼리 비교할 때 ==를 사용할 수 없으므로 compareTo()메소드를 사용해야 한다.
원시형과 참조형 비교

//원시형 자료가 참조형으로 오토박싱이 되기 때문에 아래와 같이 바로 선언이 가능하다
Integer b = 7;
String 타입
: 변수에 문자열 리터럴을 대입한 경우
- “”로 묶여 있으면 문자열로 인식되어 자바는 String 객체를 이용하여 저장함. ⇒ String 객체로 생성 → 변수가 String 객체를 참조(힙 영역 생성)
- 하나라도 문자열이 포함되면 전체를 문자열로 인
- 문자열 리터럴이 동일하면 같은 String 객체를 공유
- 참조를 잃은 String 객체는 쓰레기 수집기를 통해 메모리에서 자동 제거됨 = 쓰레기 객체
String 클래스는 유용한 기능(메소드)를 제공함
- String 변수에 저장된 문자열의 길이를 알려주는 기능(메소드)
- .length()
- 문자열 변수에 저장된 특정문자 한개만 가져오는 기능(메소드)
- .charAt();
- 0번째부터 카운트 시작
참조타입 변수의 ==, != 연산 : 동일 객체를, 또는 다른 객체 참조하는지 알아볼 때 사용
- ==: 같으면 트루, 다르면 폴스
- != : 같으면 폴스, 다르면 트루
- null: 아무것도 참조하지 않을 경우 또는 null로 초기화된 경우
- 참고: 단순 문자열 비교시에는 equals()라는 메소드 사용
다음 타입은 실무에서 거의 사용하지 않음
- byte, short: 표현 길이가 너무 작음. 자바는 기본적으로 int를 효율적으로 계산하도록 설계되어 있음
- 다만 파일이 바이트 단위이므로 파일 전송, 파일 복사 등에 주로 사용됨
- float : 표현 길이와 정밀도가 낮다. 실수형은 double을 이용하자
- char : 문자 하나를 표현할 일은 거의 없다. 대신 문자열을 사용할 수 있다
- 예) String a = "b"처럼 사용하면 된다
자주 사용하는 타입
- 정수: int, long / 20억이 넘을 것 같으면 long 사용
- byte: 파일 다룰 때 사용
- 실수 : double
타입별 기본값
- double = 0.0;
- char = ‘ ‘;
- String = null;
3) 변수와 메모리 구조
데이터 저장 단위
비트(bit)
컴퓨터의 최소 저장 단위이며 2진수 값 하나 저장할 수 있는 메모리 공간
바이트(byte)
컴퓨터의 최소 데이터 처리 단위, 8비트 = 1바이트
변수 저장 가능 범위(참고)

| Static(공용)
- 클래스 변수
- 프로그램이 실행되면 무조건 공간이 생김(객체 생성 없이도)
- static 변수로 선언하면 스택 영역에서 공용으로 이용이 가능함
| Heap
- 장소만 알면 언제든지 접근 가능한 영역
- GC가 알아서 안쓰는 항목 정리하여 메모리 확보
- 값을 입력하지 않으면 강제 초기화가 진행되고, 초기화하지 않으면 알아서 자료형에 따른 기본값이 저장됨(배열)
- 필드, 멤버, 변수, 객체와 배열(객체)이 생성되는 영역
- new 참조형 객체로 생성하면 주소값이 저장된 A와 실제 내용이 저장된A가 별도로 저장된다
- 초기값
- 기본 자료형: 숫자 디폴트 0, 논리형 디폴트 false
- 참조 자료형: null (String 등)
- null값은 없는 거나 마찬가지인 쓰레기 값이라서 접근해서 사용이 불가능함
- 다만 ==로 비교는 가능
| Stack
- 메인 메소드와 변수들이 저장되는 곳 = 메인 스택
- 서로 접근하려면 매개 변수 선언으로만 가능.
- 지역변수
- 메소드가 호출되면 프레임 추가되고, 메소드 종료되면 프레임 제거됨
- 강제 초기화되지 않음 → 초기화되지 않은 상태로 출력 시도시 오류 발생
- 예외: 프로그램 실행 중 발생하는 오류
- NullPointException: 참조 변수가 null인 상태에서 존재하지 않는 객체의 데이터나 메소드 사용할 경우 발생하는 에러 ⇒ 해당 참조 변수가 객체를 참조하도록 수정하면 해결됨
'JAVA' 카테고리의 다른 글
6. 자바(java) : 제어문(Control Statement) 간단 정리 (0) | 2024.03.28 |
---|---|
5. 자바(java) : 연산자(Operator) 간단 정리 (2) | 2024.03.27 |
4. 자바(java) : 형변환(casting) 간단 정리 (0) | 2024.03.27 |
2. 자바(java)의 기본 구조, 클래스 개요 정리 (0) | 2024.03.21 |
1. 자바(java) 기본 개념 알아보기 :: 언어 특징, 개발환경 관련 용어 간단 정리 (0) | 2024.03.20 |