자바는 학습할 내용이 많다 보니 제대로 정리하지 않으면, 놓치는 개념이 많아지기 십상입니다.😂
혼자서도 자바를 공부할 수 있도록 변수와 타입, 연산자, 조건문과 반복문, 참조 타입과 관련된 자바 용어를 정리했습니다.
[ctrl + f] 키로 궁금하신 내용을 검색해보시고, 게시물 하단의 링크에서 전체 자바 용어 정리 PDF 파일을 다운로드 받아 활용해보세요!
자바의 기본 용어
✅ 컴파일(compile)
컴퓨터가 이해할 수 있도록 0과 1로 이루어진 기계어로 변환하는 과정
✅객체 지향 프로그래밍(OOP: Object Oriented Programming)
프로그램을 개발하는 기법으로, 부품에 해당하는 객체들을 먼저 만들고 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법
🤔객체 지향 프로그래밍을 할 수 있는 언어는 따로 있다?
흔히 자바는 객체지향 언어, C언어는 절차지향 언어라고 칭하는데 그렇다고 해서 자바로 절차 지향 프로그래밍을 할 수 없는 것은 아닙니다. 자바는 객체 지향 프로그래밍에 적합한 구조로 만들어진 언어라고 생각하면 됩니다.
✅자바 가상 기계(JVM: Java Virtual Machine)
자바 프로그램은 완전한 기계어가 아닌 중간 단계의 바이트 코드이기 때문에, 이것을 해석하고 실행할 수 있게 해주는 가상의 운영체제
JVM의 메모리 영역
- 메소드 영역: 클래스(~.class)들을 클래스 로더로 읽어 클래스별로 런타임 상수 풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류해서 저장
- 힙 영역: 객체와 배열이 생성되는 영역. JVM 스택 영역에서 생성된 변수나 다른 객체의 필드에서 이 곳에 있는 객체와 배열을 참조
- JVM 스택 영역: 스레드마다 하나씩 존재. 스레드가 시작할 때마다 JVM 스택 영역이 할당
✅자바 개발 도구(JDK: Java Development Kit)
프로그램에 필요한 자바 가상 기계(JVM), 라이브러리 API, 컴파일러 등의 개발 도구가 포함된 소프트웨어 패키지
✅자바 실행 환경(JRE: Java Runtime Environment)
자바 프로그램 실행에 필요한 자바 가상 기계(JVM), 라이브러리 API가 포함된 소프트웨어 패키지
✅실행문
변수 선언, 값 저장, 메소드 호출에 해당하는 코드
✅클래스(class)
객체를 생성하기 위한 필드와 메소드가 정의된 것. 객체의 설계도에 해당한다
✅메소드(method)
어떤 일을 처리하는 실행문들을 모아 놓은 블록. 메소드를 코드 내에서 사용하는 것을 메소드 호출이라 한다.
✅주석(comment)
프로그램 실행과는 상관없이 코드에 설명을 붙인 것.
- // : //부터 라인 끝까지 주석으로 처리
- •/* ~ */ : /*와 */ 사이에 있는 모든 범위를 주석으로 처리
✅통합 개발 환경(IDE: Integrated Development Environment)
프로젝트 생성, 자동 코드 완성, 디버깅 기능을 제공하는 환경(예: Eclipse(자바), Visual Studio(C/C++))
✅디버깅(debugging)
모의 실행을 해서 코드의 오류를 찾는 행위
변수와 타입
✅변수(variable)
하나의 값을 저장할 수 있는 메모리의 공간. 프로그램에 의해서 수시로 값이 변동될 수 있다. 하나의 변수에는 오로지 하나의 값만 저장할 수 있고, 자바에서는 선언된 변수에 한 가지 종류의 값만 저장할 수 있다.
- 로컬 변수(지역 변수): 메소드 블록 내에서 선언된 변수. 로컬 변수는 메소드 실행이 끝나면 메모리에서 자동으로 없어짐
- 변수 선언: 어떤 식별자를 갖고, 어떤 데이터를 가지고 시작하는 변수라는 것을 알리는 것
- 할당 :변수에 값을 넣거나 저장하는 것을 ‘할당한다’고 함//메모리에 변수의 값이 들어갈 공간을 할당해야 하기 때문
- 참조: 변수에 접근하는 것을 ‘참조한다’고 함
✅예약어(reserved word)
이미 해당 프로그래밍 언어에서 사용하기 위해 의미가 정해져 있는 것
🤔예약어를 식별자(변수명/메소드명/함수명)로 사용하면 안되는 걸까?
프로그래밍 언어 내에서 이미 문법적인 용도로 사용되고 있기 때문에 사용하면 안 된다. 자바에서 예약어를 식별자로 사용할 경우 컴파일러에서 에러 처리하여 실행되지 않는다.
✅초기값(initial value)
변수를 선언하고 처음 저장하는 값
✅초기화(initialize)
변수에 초기값을 주는 행위
✅리터럴(literal)
소스코드 내에서 직접 입력된 값
사실 리터럴은 상수와 같은 의미지만, 프로그램에서는 상수를 “값을 한 번 저장하면 변경할 수 없는 변수”로 정의하기 때문에 이와 구분하기 위해 “리터럴”이라는 용어를 사용한다.
✅이스케이프 문자(escape character)
역슬래시(\) 기호가 붙은 특수한 문자 리터럴
이스케이프 문자 | 출력 |
\t | 수평 탭 |
\n | 줄 바꿈 |
\r | 캐리지 리턴 |
\” | “(큰 따옴표) |
\’ | ‘(작은 따옴표) |
\\ | \ |
\u16진수 | 16진수에 해당하는 유니코드 |
✅유니코드(unicode)
세계 각국의 문자들을 코드값으로 매핑한 국제 표준 규약이다. 유니코드는 하나의 문자에 대해 하나의 코드값을 부여하기 때문에 영문 ‘A’ 및 한글 ‘가’도 하나의 코드 값을 가진다. 자바는 모든 문자를 유니코드로 처리한다.
🤔아스키(ASCII) 코드와 유니코드는 어떤 차이가 있을까?
유니코드는 영문자 외에 전 세계의 문자를 표현할 수 있도록 설계된 반면 아스키(ASCII: American Standard Code for Information Interchange, 미국 정보 교환 표준 부호) 코드는 7비트로 표현되는 영문자 기반 인코딩이다. 유니코드의 앞부분은 아스키 문자로 할당되어 있다.
✅자료형(data type)
자료의 형태. 자료형에 따라 컴퓨터가 어떻게 처리하는지 달라진다. 자바에서는 기본 타입과 참조 타입으로 구분됨
✅기본 타입(primitive type)
원시 타입이라고도 한다. 정수, 실수, 문자, 논리 리터럴을 저장하는 자료형
✅참조 타입(reference type)
객체의 번지를 참조하는 타입. 배열, 열거, 클래스, 인터페이스 타입이 있다.
*값에 의한 호출(call by value)과 참조에 의한 호출(call by reference)
값에 의한 호출을 할 땐 메소드가 전달인자를 복사하여 사용하고, 메소드 실행이 종료되면 반환하는 방식이기 때문에 전달인자를 직접 수정하는 것이 의미가 없다. 참조란 대상의 주소값을 통해 접근하는 것이고, 참조에 의한 호출은 메소드가 전달인자로 주소값을 넘겨받아 해당 위치에 있는 값에 접근하여 다른 곳에서 쓰일 수 있도록 수정할 수 있다. 자바에서는 무조건 call by value인 것이 아닌가 싶지만, 전달인자로 받은 데이터의 타입에 따라 그 값value이 주소값이 되기도 하고, 객체가 가리키는 값이 되기도 한다.
연산자
✅연산자(operator)
연산에 사용되는 표시나 기호
✅피연산자(operand)
연산식에서 연산되는 데이터
✅부동 소수점(floating point)
소수점이 있는 실수 데이터를 저장하는 방식. ‘부동’은 ‘떠다니다’의 의미, 소수점이 떠다닌다는 의미에서 부동 소수점이다. 이 방식에서는 최상위 비트MSB: Most SignificantBit를 부호로 결정한다. 최상위 비트가 0이면 양수, 1이면 음수를 뜻한다.
✅제어문(control statement)
실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해주는 것
- 조건문: if문, switch문
- 반복문: for문, while문, do-while문
✅조건문(conditional statement)
특정 조건을 만족할 때 코드를 실행하는 문법
- if문: 괄호 내의 조건식이 참이면 블록 내의 문장을 실행.
- else문: if문의 조건식이 거짓이면 블록 내의 문장을 실행. 필요 없으면 없어도 됨.
- else if문: if문의 조건식이 거짓일 때 실행시킬 코드에 추가 조건을 걸고 싶을 때 사용. 마찬가지로 필요 없으면 else if를 사용하지 않아도 됨.
if (a > 0)
//중괄호를 사용하지 않으면 조건식이 참일 때 한 줄만 실행
System.out.println("a는 양수입니다.");
else if (a == 0) {
System.out.println("a는 0입니다.");
} else {
System.out.println("a는 음수입니다.");
}
switch(ch) {
case 'a':
//이 케이스에서 break 문이 없기 때문에 블록을 빠져나가지 않고 다음 case 문으로 넘어간다
case 'b':
System.out.println("ch는 a 혹은 b입니다"); //a일 경우에도 출력된다.
break;
case 'c':
System.out.println("ch는 c입니다");
break;
default:
System.out.println("a도 b도 c도 아닙니다");
break; //이 break문을 적지 않아도 이 블록을 빠져나갈 수 있다.
}
✅반복문(loop)
특정 조건을 만족하는 동안 반복해서 실행하는 문법
- for문: 반복 횟수가 정해진 경우에 주로 사용
//for문 예시 for(int i = 0; i < n; i++) //0부터 n-1까지 i를 증가시키며 코드 실행 (n회 반복)
- while문: 반복 횟수를 모를 때 주로 사용
//while문 예시 while(true) { result *= 3; if(result >= 100) //이 조건을 만족시켜야 반복문 종료 break; }
- do-while문: 조건 만족 여부와 상관없이 코드를 먼저 실행하고, 그 다음 루프부터 조건을 검사
//do-while문 예시 do { printf("꼭 출력돼야 하는 문장"); } while(false); //1회만 출력
✅무한 루프(infinite loop)
무한히 반복을 하고 싶거나 정해진 횟수 없이 일정한 조건을 충족하면 빠져나오게 하고 싶을 때 사용하는 것.
//for문을 사용한 무한 루프
for(;;) {
//반복하고 싶은 코드
}
//while문을 사용한 무한 루프
while(true){
//반복하고 싶은 코드
}
참조 타입
✅쓰레기 수집기(garbage collector)
쓰레기 수집은 메모리 관리 기법 중 하나이다. 자바에선 JVM의 쓰레기 수집기를 이용해 자동적으로 사용하지 않는 객체를 메모리에서 제거한다.
🤔객체를 제거하기 전에 수행하고 싶은 일이 있을 땐?
쓰레기 수집기가 객체를 제거하기 전에 중요한 데이터를 저장하고 싶을 때, 클래스 내에 객체 소멸자(finalize())를 재정의하여 객체가 소멸될 때 실행할 코드를 입력할 수 있다.
✅null
참조 타입 변수가 객체를 참조하지 않는다는 의미의 값. ‘널’이라고 읽는다. null값도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택 영역에 저장된다.
✅배열(array)
데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여해 놓은 자료구조. 연속된 공간이라는 성격 때문에 중간 인덱스의 값을 삽입하거나 삭제하기 어렵고, 선언 후 배열의 인덱스 수를 늘릴 수 없다.
✅인덱스(index)
0에서부터 “문자열(혹은 배열) 길이-1”까지의 번호를 매긴 것. 배열과 같은 선형 자료구조는 인덱스로 원소에 접근할 수 있다.
✅열거 타입(enumeration type)
한정된 값만을 갖는 자료형
enum Week {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
지금까지 자바의 변수와 타입, 연산자, 조건문과 반복문, 참조 타입과 관련된 용어에 대해 알아보았습니다.
<혼자 공부하는 자바>의 부록인 ‘혼공 용어 노트‘에서 전체 내용을 확인하실 수 있습니다.
👀도서 자세히 보기
✍️용어 노트 다운로드
🧑💻무료 동영상 강의 시청
Leave A Comment