[플레이데이터]

[PlayData - Day 16] JAVA 시작하기, 변수와 타입

EYZ27 2023. 1. 13. 17:09

1. K-Digital Training 과정

  • 빅데이터 기반 지능형SW 및 MLOps 개발자 양성과정 19기 (2023/01/12 - Day 16)

2. 목차

Chapter 1 자바 시작하기

  1. 프로그래밍 언어와 자바
  2. 이클립스 개발 환경 구축
  3. 자바 프로그램 개발 과정

Chapter 2 변수와 타입

  1. 변수

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] 버튼을 클릭
      • 만약 체크하지 않았다면, 클래스 중괄호 {} 안에 직접 입력해주면 된다.
    • 작성 예

"Hello, Java"를 프린트하는 소스 코드 작성. 문자 출력을 위해 큰따옴표(")가 필수이다. 작은따옴표(')는 불가능.

  • [3단계] 바이트 코드 실행
    • 실행할 소스 파일을 선택하고, 툴 바에서 [Run] 아이콘을 클릭하거나, 마우스 오른쪽 버튼을 클릭한 후 [Run As] - [Java Application]을 선택
      • 키보드 [Ctrl + F11]를 눌러도 실행된다.
    • 이클립스 하단에 'Console' 뷰가 추가되면서 실행 결과가 출력된다.

 

프로그램 소스 분석

  • 어느 패키지에서 생성되었는지 확인하기 위한 패키지 선언 필수
  • 다음으로 클래스 선언부에서 공개 클래스('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() 메서드를 이용한다.