수업 내용 정리
(4주차 23일) Java 기초, 변수의 자료형
헨헨7
2024. 6. 4. 17:37
자바(Java)
> JVM(Java Virtual Machine)
- Windows, Linux, MacOS와 같은 운영체제(OS)에서는 자바 프로그램을 직접 실행할 수 없으며 JVM을 통해 자바 프로그램을 실행할 수 있다.
- JVM은 JDK(Java Development Kit) 또는 JRE(Java Runtime Environment)를 설치하면 자동으로 설치되는데 JDK와 JRE는 운영체제에 별로 제공되고 운영체제에 맞게 설치해야 한다.
- JVM이 설치된 환경에서 자바 프로그램을 실행하기 때문에 개발자는 운영체제와 상관없이 자바 프로그램을 개발할 수 있다.
> Eclipse 단축키 설정 참고
- Mac 환경에서 실리콘 칩부터는 command+space 단축키가 제대로 작동하지 않는다고 해서 Content Assist 키를 option+space 키로 변경해 주었다.
맥OS, 맥북에서 이클립스 syso 단축키 등록 하는법
맥OS, 맥북에서 이클립스 syso 단축키 등록 하는법 안녕하세요 청 입니다. 요즘 코딩 공부 열심히 하고 ...
blog.naver.com
- 단축키 모음
[Eclipse] 이클립스 단축키 모음 (윈도우/맥)
[Eclipse] 이클립스 단축키 모음 & 추가 정보 윈도우와 맥 키보드 Run / 실행 소스 네비게이션 문자...
blog.naver.com
> 변수(Variable)
- 자료형: 저장될 데이터의 타입으로, 저장하고자 하는 값의 종류에 맞게 기술해야 한다.
- 변수의 명명 규칙
- 영어 대소문자가 구분되며 문자 수의 제한이 없다.
- 숫자로 시작하면 안 된다.
- 특수문자는 '_'와 '$'만 허용한다.
- 여러 단어로 조합된 변수의 이름은 첫 시작 글자는 소문자로 하고 조합되는 단어의 첫 글자를 대문자로 하는 것이 관례이다.
- 의미 있는 이름을 지어주는 것이 좋다.
- 예약어를 사용하면 안 된다. (class, int, new, null 등)
- 변수의 초기화
- 초기값: 변수를 선언하고 처음 저장되는 값
- 초기화: 변수에 초기값을 대입하는 것
- 지역변수(메소드 안에 선언된 변수)를 사용하려면 반드시 초기화되어야 한다.
- 문자열
- 자바에서 단어나 문장을 문자열이라고 한다.
- 문자열을 저장할 때는 String 타입을 사용하는데 String은 클래스 타입으로 String 타입의 변수는 참조 변수이다.
String str = "오리";
String str = new String("오리");
String str = "오리" + "꽥꽥"; // 문자열 연결 연산
String str = new String("오리" + "꽥꽥");
> 메모리 사용 영역
- 메소드 영역: JVM이 시작할 때 생성되고, 모든 스레드가 공유하는 영역
- 힙 영역: 객체와 배열이 생성되는 영역
- JVM 스택 영역
- 메소드를 호출 할 때마다 프레임을 추가하고, 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행.
- 프레임 내부에는 로컬 변수 스택이 있는데, 기본 타입 변수와 참조 타입 변수가 추가되거나 제거됨.
- 스택 영역에 변수가 생성되는 시점은 초기화될 때, 즉 최초로 변수에 값이 저장될 때.
- 변수는 선언된 블록 안에서만 스택에 존재하고, 블록을 벗어나면 스택에서 제거됨.
> 자료형
package com.beyond.variable;
import com.beyond.variable.practice.A_Variable;
import com.beyond.variable.practice.B_ConsoleOutput;
public class Application {
/*
* 주석(Comment)
* - 소스 코드와는 무관하고, 코드로 인식되지 않는다.
* - 주로 코드에 대한 설명을 작성할 때 사용한다.
*/
// 한 줄 주석
// main 메소드는 프로그램의 시작점으로
// java.exe가 Application.class를 실행시킬 때 제일 먼저 실행되는 메소드이다.
// 클래스 명은 자바 파일명과 동일해야 한다.
public static void main(String[] args) {
// opt + 방향키: 선택된 범위 위/아래 방향으로 이동
/** 1) 실행할 메소드가 있는 클래스를 생성(new)한다.
* [표현법]
* 클래스명 변수명 = new 클래스명();
*/
//1-1) import 문을 사용하지 않고 클래스 생성
//com.beyond.variable.practice.A_Variable variable = new com.beyond.variable.practice.A_Variable();
//1-2) import 문을 사용하는 경우(Command+shift+O)
A_Variable variable = new A_Variable();
B_ConsoleOutput Output = new B_ConsoleOutput();
/** 2) 생성한 클래스로 메소드 실행(호출)
* [표현법]
* 변수명.메소드명();
*/
//variable.variableTest();
//variable.autoCasting();
//variable.casting();
//variable.practice();
Output.valuePrint();
}
}
package com.beyond.variable.practice;
public class A_Variable {
/**
* 변수의 선언
* 변수명: 카멜 표기법
* [표현법]
* 자료형 변수명;
*/
public void variableTest() {
// 논리형(boolean)
boolean isTrue;
// 정수형
byte bNum; //(-128 ~ 127)
short sNum; //-32,768 ~ 32,767
int iNum; //-2,147,483,648 ~ 2,147,483,647
long lNum; //-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
// 실수형
float fNum; //±1.4E-45 ~ 3.4E38
double dNum; //±4.9E-324 ~ 1.8E308
// 문자형
//char ch;
//char ch = 'A';
//char ch = 0;
//char ch = '\u0000';
//char ch = -90;
char ch = 'a';
System.out.println("ch: " + ch);
System.out.println();
// 문자열
//String name; : 문자열을 가리킬 수 있는 참조 변수를 선언
//String name = ""; : 빈 문자열로 초기화
//String name = new String("현지");
String name = null;
System.out.println("name: " + name);
System.out.println();
// 지역 변수를 생성 후 초기화가 되지 않은 경우 오류 발샏
// System.out.println(isTrue);
isTrue = false; // 선언 후 초기화
// isTrue = 1; : 에러 발생
System.out.println("" + isTrue); // 문자열을 결합하는 경우, 문자형으로 형변환 발생
System.out.println();
//bNum = 128; : 바이트 범위 초과 에러 발생
bNum = 127;
sNum = 32000;
iNum = 234567991;
// lNum = 9223372036854775807; : 리터럴은 정수형이므로, int 범위를 벗어나는 경우 오류 발생
// long 타입의 리터럴은 숫자 뒤에 L 또는 l을 입력해야 한다.
lNum = 9223372036854775807L;
System.out.println("bNum: " + bNum);
System.out.println("sNum: " + sNum);
System.out.println("iNum: " + iNum);
System.out.println("lNum: " + lNum);
System.out.println();
// float 타입의 리터럴에서 숫자 뒤에 F또는 f를 입력해야 한다.
fNum = 3.141592F;
// dNum = 3.14D;
dNum = 3.14;
System.out.println("fNum: " + fNum);
System.out.println("dNum: " + dNum);
System.out.println();
/**
* 변수의 명명 규칙
* 1) 대소문자 구분
* 2) 숫자로 시작하면 안 된다.
* 3) 특수문자는 _, $만 사용 가능하다.
* 4) 예약어를 사용하면 안 된다.
*/
int number;
int NUMBER;
//String number: 자료형이 달라도 변수명이 같으면 에러 발생
// int 1age;
int a1g2e3;
int _age;
//int %age;
//int double;
//int public;
}
/**
* 자동 형 변환
* - 데이터 표현 범위가 작은 자료형을 큰 자료형으로 변환한다.
*/
public void autoCasting() {
byte bNum = 10;
short sNum = 12;
int iNum = sNum; //short -> int 자동 형 변환
long lNum = iNum; //int -> long 자동 형 변환
float fNum = lNum; //long -> float 자동 형 변환: float 타입이 표현 가능한 수의 범위가 더 크기 때문
double dNum = fNum;
//iNum = dNum; :double -> int로 변환은 자동 형 변환이 일어나지 않음
System.out.println("dNum = " + dNum);
System.out.println("sNum = " + sNum);
System.out.println("iNum = " + iNum);
System.out.println("lNum = " + lNum);
System.out.println("fNum = " + fNum);
System.out.println("dNum = " + dNum);
char ch = '현';
iNum = ch;
System.out.println("iNum = " + iNum); //유니코드값 출력
System.out.println();
double result = 12 + 3.3; // 12.0 + 3.3 = 15.3을 result에 대입
System.out.println("result = " + result);
// byte, short 타입의 데이터는 연산 시 무조건 int 타입으로 변환 후 처리된다.
int result2 = bNum + sNum;
System.out.println("result2 = " + result2);
long result3 = 30 + 30; // 30 + 30 = 60, 60을 long 타입으로 변환 후 대입(60L)
long result4 = 30 + 30L; // 30L + 30L = 60L
System.out.println("result4 = " + result4);
}
/**
* 강제 형 변환
* [표현법]
* (자료형) 데이터;
*/
public void casting() {
double dNum = 4.234567893456789;
float fNum = (float)dNum;
int iNum = (int)fNum;
System.out.println("dNum = " + dNum);
System.out.println("fNum = " + fNum);
System.out.println("iNum = " + iNum);
System.out.println((byte)290);
System.out.println();
int sum = iNum + (int)dNum;
System.out.println("sum = " + sum);
}
/**
* 실습 문제
* 홍길동: 국어 60점, 영어 70점, 수학 66점
* 총점과 평균을 출력하시오.
*
* 출력)
* 국어 점수: 60점
* 영어 점수: 70점
* 수학 점수: 66점
*
* 총점: 196점
* 평균: 65.33점
*/
public void practice() {
final int kor = 60; //final: 초기화를 한 번 하면, 값을 변경할 수 없음
int eng = 70;
int math = 66;
int sum = kor + eng + math;
double avg = sum / 3.0;
System.out.printf("국어 점수: %d점\n", kor);
System.out.printf("영어 점수: %d점\n", eng);
System.out.printf("수학 점수: %d점\n\n", math);
System.out.println("총점: " + sum + "점");
System.out.println("평균: " + avg + "점");
}
}
package com.beyond.variable.practice;
public class B_ConsoleOutput {
public void valuePrint() {
/** System.out.print()
* () 안의 값을 콘솔에 출력해 주는 메소드
* 줄바꿈은 일어나지 않는다.
*/
System.out.print("안녕하세요.");
System.out.print(12345);
System.out.print(false);
//System.err.print("에러입니다.");
System.out.println();
/** System.out.println()
* print 메소드와 동일하게 출력하는 메소드로
* 출력 후 자동으로 줄바꿈을 해주는 메소드
*/
System.out.println("안녕하세요.");
System.out.println(12345);
System.out.println(false);
/** System.out.printf()
* 정해져 있는 서식에 맞춰서 그 서식에 맞는 값을
* 줄바꿈하지 않고 출력해 주는 메소드
*
** 서식 지정자
* %d: 정수형, %f: 실수형, %b: 논리형
* %c: 문자형, %s: 문자열
*
** escape 문자
* \n: 줄바꿈, \t: 수평 탭
* \": 큰 따옴표 출력, \': 작은 따옴표 출력, \\: \ 출력
*/
System.out.printf("%d\n", 10);
System.out.printf("%d + %d = %d\n", 10, 20, (10 + 20));
System.out.printf("%.2f\t%.3f\n", 3.14, 4.123455555);
System.out.printf("%c %s\n", 'A', "\"Hello\"");
}
}