00. 기본
1) 자바 소스 파일의 파일명은 public 클래스명과 동일해야 한다.
2) 자바는 대소문자를 구분한다.
3) 소스 파일이 변경되면 컴파일부터 다시 진행하기
4) 문장은 ; 으로 끝나야 한다.
01. 변수
1) 프로그램 사용 중에 발생하는 임의 값을 저장하기 위한 공간
2) 변수명의 시작은 항상 영문자 소문자로 작성
3) 중간에 _나 숫자를 사용할 수 있다.
4) 키워드(예약어)는 변수로 사용할 수 없다.
5) 변수에 할당되는 값을 리터럴이라고 한다.
6) 형식 → 데이터 타입 변수명 = 변수에 저장할 값(리터럴);
예) 숫자(정수)를 저장할 수 있는 변수를 선언하고 100을 할당
02. 자바의 데이터 타입
- 기본형은 실제 값을 가지고 있지만 참조형은 참조할 수 있는 주소 값을 가진다.
- stack 영역에 저장된 값이 리터럴이면 기본형, 주소값이면 참조형이다.
* 1byte는 부호 비트 1bit와 7bit이다.
01) 상수
① final
- final이 추가된 변수는 상수
- 상수는 정해진 값이 저장된 변수로 값을 다시 변경할 수 없다.
- 상수는 대문자로 정의한다.
final int NUM1 = 100;
02) 기본형
- 메모리에 값 자체를 저장
- 산술 계산 가능
- null 값을 가질 수 없음(객체 타입이 아님)
예) 정수형, 실수형, 문자형, 논리
① 정수형
- 정수형 변수에 저장되는 리터럴은 기본 데이터 타입이 int형
- long 타입은 리터럴로 표현할 수 있는 범위 밖의 값을 저장해야 하므로 접미사(L, l)를 추가해서 int 리터럴이 아니라 long 리터럴이라는 것을 컴파일러에게 알려준다.
- 종류: byte(1byte), short(2byte), int(4byte), long(8byte)
long myLong = 123456789L; // 'L' 혹은 'l'을 추가하여 long 타입임을 명시
② 실수형
- 실수형 변수에 저장되는 리터럴은 기본 데이터 타입이 double형
- float 타입도 long처럼 접미사(F, f)를 추가한다.
- 종류: float(4byte), double(8byte)
float myFloat = 3.14F; // 'F' 혹은 'f'를 추가하여 float 타입임을 명시
③ 논리형
- 종류: boolean
④ 문자형
- char 타입의 변수에 할당되는 리터럴은 ' ' 로 표현한다.
- 종류: char
03) 참조형
- 메모리에 데이터 주소(참조 값)를 저장(실제 값은 힙 메모리에 위치)
- 산술 연산 불가능
- null 값을 가질 수 있음(NPE에 대한 대비 및 처리 필요)
예) 배열, 열거, 클래스, 인터페이스
- API 클래스나 직접 작성한 클래스를 메모리에 할당한 후 사용하기 위해서 선언한 변수
- 주소값을 가지고 있다.
- new 연산자를 이용해서 클래스를 메모리에 저장(객체생성, 인스턴스화)
- heap에 할당된 클래스를 객체, 인스턴스라 한다.
- 생성된 객체의 주소를 객체 참조(갖고 있는 변수를 이용해서 객체)의 기능을 사용
- . 연산자를 통해 접근
할당될 클래스 변수 = new heap 할당될 클래스명()
───┬─── ────┬────
데이터 타입 사용하고 싶은 클래스
java 실행 > .class파일 검증 > 클래스로더가 .class를 사용하기 위해서 Runtime Data Area 의 Method Area에 올려놓는다.
method area: 정보들이 저장
① Stack
- 후입선출(LIFO) 형태의 선형 데이터 구조
- 컴파일러 또는 인터프리터가 관리하며, 함수 호출과 지역 변수와 같은 작은 크기의 데이터를 저장하는데 사용
- 자동 메모리 관리를 지원
- 함수 호출 시 지역 변수와 매개 변수가 스택 프레임에 순차적으로 할당
- 함수 실행이 끝나면 스택 프레임이 해제되며, 이전에 할당된 메모리 공간을 재사용한다.
- 상대적으로 작은 메모리 공간을 사용
- 스택 프레임의 크기는 컴파일 시점에 결정되며, 일반적으로 제한된 크기를 가지고 있다.
② Heap
- 동적으로 할당되는 데이터를 저장하기 위한 구조
- 메모리 할당 및 해제를 개발자가 직접 관리
- 상대적으로 큰 크기의 메모리 공간을 사용하며 힙의 크기는 운영체제 및 사용 가능한 시스템 메모리에 따라 달라짐
- 메모리를 명시적으로 해제하기 전까지 계속 존재
- 개발자가 메모리 해제를 하지않으면 메모리 누수가 발생할 수 있다.
- 주로 동적으로 생성된 객체, 큰 데이터 구조 및 메모리가 오래 지속되어야 하는 데이터를 저장하는데 사용
03. 데이터 형변환
1) 기본형
① 자동 형변환
- 작은 데이터를 큰 데이터타입의 변수에 저장할 수 있다.
- byte → short → int → long → float → double
char → int (ASCII코드값)
② 명시적 형변환(강제형변환)
- 강제로 데이터의 타입을 변환
- 사이즈가 큰 변수를 작은 변수를 할당할 수 없다.
- 이런 경우 강제로 형변환
타입 변수 = (변환하려고 하는 데이터 타입)변수;
2) 참조형
① 업캐스팅(Upcasting)
- 하위 클래스의 객체를 상위 클래스 타입으로 변환하는 것
- 자식 클래스 타입의 객체를 부모 크래스 타입으로 형 변환하는 것을 의미
- 업캐스팅은 자동으로 이루어지며, 명시적인 형변환 연산자는 필요없다.
Parent parent = new Child(); // 업캐스팅
② 다운캐스팅(Downcasting)
- 상위 클래스의 타입의 객체를 하위 클래스의 타입으로 변환하는 것
- 업캐스팅 된 객체를 다시 원래의 하위 클래스 타입으로 형변환하는 것을 의미
- 명시적인 형변환 연산자를 사용하여 직접 형변환을 수행해야 한다.
이때, 원래 객체가 해당 클래스의 인스턴스인지를 확인해야 한다.
Instanceof 연산자를 사용하여 확인할 수 있다.
Parent parent = new Child();
Child child = (Child) parent; // 다운캐스팅
04. 연산자
1) 산술 연산자: + - / * %
2) 단항 연산자(증감 연산자): x++, ++x, x--, --x
3) 비교 연산자: > >= < <= != ==
4) 논리 연산자: & | ! && ||
- &&과 ||의 경우 조건 충족 시 나머지 항은 검사하지 않음
→ 뒷 항이 오류가 나는 항이면 검사하지 않고 넘어가 오류가 나지 않음
5) 삼항 연산자: 조건?참:거짓
6) 대입 연산자: i+=30; i/=30; 등
'Back End > Java' 카테고리의 다른 글
배열 (0) | 2023.07.14 |
---|---|
제어구문 (0) | 2023.07.14 |
자바 환경설정 및 개념 (0) | 2023.07.14 |