[PlayData - Day 16] JAVA 시작하기, 변수와 타입
1. K-Digital Training 과정
- 빅데이터 기반 지능형SW 및 MLOps 개발자 양성과정 19기 (2023/01/12 - Day 16)
2. 목차
Chapter 1 자바 시작하기
- 프로그래밍 언어와 자바
- 이클립스 개발 환경 구축
- 자바 프로그램 개발 과정
Chapter 2 변수와 타입
- 변수
3. 수업 내용
* <혼자 공부하는 자바(저자: 신용권, 출판: 한빛미디어)>를 바탕으로 함
Chapter 1 자바 시작하기
Section 1 프로그래밍 언어와 자바
- 기계어(machine language): 컴퓨터가 이해할 수 있는 0과 1로 이루어진 이진 코드
- 소스 파일(source file): 프로그래밍 언어로 작성한 파일
- 컴파일(compile): 소스 파일을 컴퓨터가 이해할 수 있는 기계어(machine language)로 번역
자바 소개
- 웹사이트를 개발하는 핵심 언어
- 모든 운영체제에서 실행 가능
- 객체 지향 프로그래밍(OOP: Object-Oriented Programming)
- 메모리 자동 정리
- 무료 라이브러리
자바 개발 도구 설치
- 자바 개발 도구(JDK: Java Development Kit): Open JDK와 Oracle JDK가 있다.
- Oracle JDK는 개발/학습용으로는 무료이나, 상업용으로는 유료이다.
- 오라클 웹사이트(https://www.oracle.com) > [Products] > [Java] 메뉴 클릭
- [Download Java] 클릭하여 설치파일 다운로드 후 설치
환경 변수 설정
- JAVA_HOME 환경 변수 등록
- (윈도우) 검색에서 [시스템 환경 변수 편집] 검색 및 클릭
- [환경 변수] 클릭
- '시스템 변수'에서 [새로 만들기] 클릭
- '변수 이름'에 'JAVA_HOME', '변수 값'에 JDK가 설치된 경로(ex. C:\Program Files\Java\jdk-19)
Path 환경 변수 수정
- JDK의 설치 폴더 > bin 폴더 안의 컴파일 명령어(javac)와 컴파일된 파일을 실행하는 명령어(java)
- bin 폴더 안에 있기 때문에, 다른 폴더에서 실행할 수 없다.
- 다른 폴더에서 실행하려면 환경 변수 Path에 bin 폴더를 등록해야 한다.
- (윈도우) 검색에서 [시스템 환경 변수 편집] 검색 및 클릭
- [환경 변수] 클릭
- '시스템 변수'에서 'Path' 변수를 찾아서 [편집] 클릭
- [새로 만들기] 버튼을 클릭하고 '%JAVA_HOME%\bin' 입력
- [위로 이동] 버튼을 눌러서 첫번째 항목으로 올려준다.
Section 2 이클립스 개발 환경 구축
이클립스 설치
- 통합 개발 환경(IDE: Integrated Development Environment): 프로젝트 생성, 자동 코드 완성, 디버깅 등과 같이 개발에 필요한 여러 가지 기능을 통합적으로 제공해주는 툴
- 이클립스(Eclipse): 자바 프로그램을 개발할 수 있는 IDE
- 이클립스 홈페이지(https://www.eclipse.org)에서 설치 파일 다운로드하여 설치
- 설치 과정 중 install 종류 선택 창에서 [Eclipse IDE for Enterprise Java Developers]를 선택
워크스페이스 설정
- 이클립스를 실행하면 [Select a directory as workspace] 대화상자가 나타난다.
- Workspace를 간단한 경로(C:\SelfStudyJava)로 설정하면 이용하기 쉽다.
- 'Use this as the default and do not ask again'의 체크 박스를 클릭한 후 [Launch] 버튼을 누르면 재시작할 때 다시 묻지 않는다.
퍼스펙티브와 뷰
- 자바를 처음 학습할 때는 Java EE 퍼스펙티브보다는 Java 퍼스펙티브로 변경해서 사용하는 것이 좋다.
- 이클립스 상단 메뉴 중 [Window] - [Perspective] - [Open Perspective] - [Java] 메뉴를 선택
- [Window] - [Show View] 메뉴에서 다양한 뷰를 선택하여 볼 수 있다.
- 가장 많이 사용하는 뷰: Package Explorer, Console
Section 3 자바 프로그램 개발 과정
자바 프로그램 개발 과정
- 확장명이 .java인 텍스트 파일을 생성하고 자바 언어로 코드 작성
- 이 자바 소스 파일을 컴파일러인 javac 명령어로 컴파일
- 컴파일 성공 시 확장명이 .class인 바이트 코드 파일이 생성됨
- 이 바이트 코드 파일을 완전한 기계어로 번역해서 실행하려면 java 명령어를 사용해야 함
바이트 코드 파일과 자바 가상 기계
- javac 명령어로 컴파일된 바이트 코드 파일은 JDK가 설치된 어떠한 운영체제에서도 java 명령어로 동일하게 실행할 수 있다.
- 이러한 과정은 자바 가상 기계(JVM: Java Virtual Machine)라는 번역기가 각 운영체제에서 실행가능한 기계어로 번역해서 실행하기 때문이다.
프로젝트 생성부터 실행까지
- [1단계] 프로젝트 생성
- 이클립스 실행 - [File] - [New] - [Java Project]
- [New Java Project] 대화상자가 나타나면 [Project name] 입력란에 새 프로젝트 명(ex. 'chap01')을 입력하고 나머지는 그대로 유지한 채 [Finish] 버튼을 클릭
- 'JRE'가 'JavaSE-11(JDK 11)' 이후 버전이라면, [module-info.java]가 필요하다.
- 프로젝트 생성 후 module-info.java 편집 뷰에서 중괄호{} 블록 안에 requires java.se; 를 작성하고 저장
- 이것은 Java SE(JDK)가 제공하는 모든 모듈이 필요함을 의미한다.
- [2단계] 소스 파일 생성과 작성
- Package Explorer 뷰에서 chap01 프로젝트의 src 폴더를 선택하고 마우스 오른쪽 버튼을 클릭한 후 [New] - [Package]를 선택
- 키보드에서 [Ctrl + N] 을 누른 후 [Package]를 선택해도 된다.
- 'Name' 입력란에 패키지 이름을 입력하고 [Finish] 버튼을 누른다. (ex. sec03.exam01)
- Package Explorer 뷰에서, 방금 전 생성한 패키지를 선택하고 마우스 오른쪽 버튼을 클릭한 후 [New] - [Class]를 선택
- 키보드에서 [Ctrl + N]을 누른 후 [Class]를 선택해도 된다.
- 'Name' 입력란에 클래스 이름을 입력하고, main() 메소드를 자동으로 추가하기 위해 'public static void main(String[] args)'를 체크한 후 [Finish] 버튼을 클릭
- 만약 체크하지 않았다면, 클래스 중괄호 {} 안에 직접 입력해주면 된다.
- 작성 예
- Package Explorer 뷰에서 chap01 프로젝트의 src 폴더를 선택하고 마우스 오른쪽 버튼을 클릭한 후 [New] - [Package]를 선택
- [3단계] 바이트 코드 실행
- 실행할 소스 파일을 선택하고, 툴 바에서 [Run] 아이콘을 클릭하거나, 마우스 오른쪽 버튼을 클릭한 후 [Run As] - [Java Application]을 선택
- 키보드 [Ctrl + F11]를 눌러도 실행된다.
- 이클립스 하단에 'Console' 뷰가 추가되면서 실행 결과가 출력된다.
- 실행할 소스 파일을 선택하고, 툴 바에서 [Run] 아이콘을 클릭하거나, 마우스 오른쪽 버튼을 클릭한 후 [Run As] - [Java Application]을 선택
프로그램 소스 분석
- 어느 패키지에서 생성되었는지 확인하기 위한 패키지 선언 필수
- 다음으로 클래스 선언부에서 공개 클래스('public class')와 클래스 명(ex. Hello) 선언
- 다음으로, java 명령어로 바이트 코드 파일을 실행하려면 클래스 블록 내부에 main() 메소드 블록을 가지고 있어야 한다.
- 메소드 선언부 ('public static void main(String[] args)'): 클래스 생성 시 자동 작성 혹은 직접 작성
- java 명령어로 바이트 코드 파일을 실행하면 제일 먼저 main 메소드를 찾아 블록 내부를 실행하게 된다.
- 그래서 main() 메소드를 '프로그램 진입점(entry point)'이라고 부른다.
주석 사용하기
구분 | 주석 기호 | 설명 |
라인 주석 | // | //부터 라인 끝까지 주석으로 처리 |
범위 주석 | /* ... */ | /*와 */ 사이에 있는 내용을 모두 주석으로 처리 |
도큐먼트 주석 | /** ... */ | /**와 */ 사이에 있는 내용을 모두 주석으로 처리 주로 javadoc 명령어로 API 도큐먼트를 생성하는 데 사용 |
- 참고: 문자열 내부에는 주석을 붙일 수 없다. 만약 주석 기호를 쓴다면 문자열 데이터로 인식한다.
실행문과 세미콜론(;)
- 실행문 끝에는 반드시 세미콜론(;)을 붙여서 실행문이 끝났음을 표시해주어야 한다.
- 컴파일러는 세미콜론까지 하나의 실행문으로 해석하기 때문에, 하나의 실행문을 여러줄에 걸쳐서 작성하거나 한줄에 여러가지 실행문을 작성해도 세미콜론으로 구분만 잘 이루어진다면 문제가 없다.
Chapter 2 변수와 타입
Section 1 변수
- 변수(Variable): 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 '이름'
- 하나의 변수에 두 가지 값을 저장할 수 없고, 하나의 값만 저장 가능
변수 선언
- 변수를 사용하기 위해서 변수를 선언해야한다.
- 어떤 타입의 데이터를 저장할 것인지, 그리고 변수 이름이 무엇인지를 결정한다.
- 첫번째 글자: 문자, $, _만 가능
- 영어 대소문자 구분
- 길이 제한 없음
- 자바 예약어는 사용 불가(ex. boolean, byte, class, new, if, true...)
값 저장
- 변수에 값을 저장할 때는 대입 연산자(=)를 사용
- 오른쪽의 값을 왼쪽의 변수에 저장한다.
- 변수 초기화: 변수에 최초로 값이 저장될 때 변수가 생성되며, 이를 '변수 초기화'라고 한다. 이때 사용된 값을 '초기값'이라고 한다.
- 변수 선언과 동시에 변수 초기값을 제공할 수 있다.
- int score = 90;
변수 사용
- println() 메소드의 매개값에 변수를 사용하면 변수에 저장된 값을 사용해서 출력한다.
- 산술 연산식에 변수를 사용하여 연산을 수행할 수 있다.
변수 사용 범위
- 로컬 변수(local variable): 메소드 블록 내에 선언된 변수를 로컬 변수라고 하며, 메소드 블록 내에서만 사용되고 메소드 실행이 끝나면 메모리에서 자동 삭제된다.
- 즉, 블록 바깥에서 사용이 불가능하다.
Section 2 기본 타입
구분 | 저장되는 값에 따른 분류 | 타입의 종류 |
정수 타입 | byte, char, short, int, long | |
기본 타입 | 실수 타입 | float, double |
논리 타입 | boolean |
정수 타입
- 저장되는 값의 허용 범위: 어떤 타입이 더 큰지 알아야 한다.
byte : -128 ~ 127
short : -32,768 ~ 32,767
char : 0 ~ 65535(유니코드 형식. 양수값만 갖는다.)
int : -2,147,483,648 ~ 2,147,483,647
long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
String 타입
- 작은 따옴표(')로 감싼 문자는 char 타입 변수에 유니코드로 저장된다.
- 큰 따옴표(")로 감싼 문자, 또는 여러개의 문자들은 유니코드로 변환되지 않는다.
- String 타입으로 저장하려면 큰 따옴표로 감싸야 한다.
- String 타입은 기본타입은 아니고 '클래스 타입'이다.
- 이스케이프 문자표
이스케이프 문자 | 출력 용도 |
\t | 탭만큼 띄움 |
\n | 줄 바꿈(라인 피드) |
\r | 캐리지리턴(행의 맨 앞으로) |
\" | 큰 따옴표(")가 문자열 안에 출력되도록 |
\' | 작은 따옴표(')가 문자열 안에 출력되도록 |
\\ | 역슬래시(\)가 문자열 안에 출력되도록 |
\u[16진수] | 16진수 유니코드에 해당하는 문자를 출력(ex. "\u0041" == "A") |
실수 타입
- 저장되는 값의 허용 범위(양수 기준)
float : (1.4 × 10^-45) ~ (3.4 × 10^38), 정밀도 = 7자리
double : (4.9 × 10^-324) ~ (3.4 × 10^308), 정밀도 = 15자리
- 자바는 실수 리터럴을 기본적으로 double 타입으로 해석하기 때문에 double 타입 변수에 저장해야 한다.
- float 타입으로 저장하고 싶다면 리터럴 뒤에 'f' 또는 'F'를 붙여야 한다.
- 메모리에 여유가 있고 특별한 이유가 없다면 double 타입을 사용하는 것이 좋다.
논리 타입 = boolean 타입
- 참과 거짓을 의미하는 논리 리터럴. true나 false를 사용한다.
Section 3 타입 변환
- 데이터 타입을 다른 데이터 타입으로 변환하는 것
자동 타입 변환
- 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생
- byte < short < int < long < float < double
- char 타입의 경우, int 타입으로 자동 변환되면 유니코드 값이 변수에 저장된다.
- 또한, byte 타입이나 short, int 타입에서 char 타입으로는 자동 변환이 안된다. (char 타입은 음수가 허용되지 않기 때문)
강제 타입 변환
- 큰 허용 범위의 타입을 작은 허용 범위의 타입으로 강제로 나눠 저장하는 것
- 캐스팅 연산자 괄호 ()를 이용하여, 괄호 안에 들어가는 타입으로 변환 타입을 지정한다.
int intValue = 10;
byte byteValue = (byte) intValue;
정수 연산에서의 자동 타입 변환
- byte, short 타입이 연산될 때는 int 타입으로 자동 변환되어 연산된다.
- 변수를 선언할 때 int로 선언해줘야 컴파일 에러가 발생하지 않는다.
- 특별한 이유가 없는 경우, 정수 연산에 사용되는 변수는 int 타입으로 선언하는 것이 좋다.
- 연산에 여러 타입이 섞여있다면 허용범위가 더 큰 타입으로 자동 변환된다.
실수 연산에서의 자동 타입 변환
- 피연산자 중 하나만 double 타입이어도 double 타입으로 자동 변환되어 연산이 수행된다.
- 주의할 점은, 정수 연산의 결과가 실수가 되어도(나눗셈) 정수로 반환한다.
- 나눗셈의 결과를 그대로 반환하려면 피연산자 하나 이상을 double 타입으로 변환해야한다.
+ 연산에서의 문자열 자동 타입 변환
- 피연산자 중 하나가 문자열일 경우에는 나머지 피연산자도 문자열로 자동 변환되어, 문자열 결합 연산을 수행한다.
- 먼저 수행된 연산의 타입에 따라 문자열 결합 연산이 이루어질지 덧셈 연산이 이루어질지 정해진다.
int value = 1 + 2 + 3;
>>> int value = 6;
String str = 1 + 2 + "3";
>>> String str = "33";
String str = 1 + "2" + 3;
>>> String str = "123";
문자열을 기본 타입으로 강제 타입 변환
변환 타입 | 사용 예 |
String > byte | byte value = Byte.parseByte(str); |
String > short | short value = Short.parseShort(str); |
String > int | int value = Integer.parseInt(str); |
String > long | long value = Long.parseLong(str); |
String > float | float value = Float.parseFloat(str); |
String > double | double value = Double.parseDouble(str); |
String > boolean | boolean value = Boolean.parseBoolean(str); |
- 문자열이 숫자일 경우에 가능하며, 숫자가 아닌 경우 NumberFormatException 에러가 발생한다.
- 기본 타입의 값을 문자열로 변경하려면 String.valueOf() 메서드를 이용한다.