thesunset 2022. 9. 25. 13:44

02. Variable

# A_Variable.java(variable)

package com.kh.variable;

public class A_Variable {

- 변수의 필요성

//주급계산을 해볼까요?

public void calPay() { //calpay()시작

System.out.println("---변수를 사용하기 전---");

System.out.println("시급: 9660원");
System.out.println("근무시간: 8시간");​
System.out.println("근무일자: 4일");​

//주급 = 시급*근무시간*근무일자
//출력형식 [xxx : ooooo원 형식]
//자바에서 +기호는 값과 값을 붙일 때 사용
//자바에서 *기호는 곱하기를 할 때 사용

System.out.println("이** : "+ (9860 * 8 * 4)+"원");​
System.out.println("송** : "+ (9860 * 8 * 4)+"원");
System.out.println("박** : "+ (9860 * 8 * 4)+"원");​
System.out.println("유** : "+ (9860 * 8 * 4)+"원");​
System.out.println("---변수 사용 후---");​

//각각의 시급, 근무시간, 근무 일수라는 값을 담을 공간, 즉 변수를 만들고 그 안에 값을 담는다.

int pay = 9660; //시급
int time = 8; //근무 시간
int day = 5; //근무 일자


System.out.println("시급: "+ pay + "원");​
System.out.println("근무시간: " + time + "시간");​
System.out.println("근무일자: " + day + "일");​


System.out.println("이** : " + (pay*time*day) + "원");​
System.out.println("송** : " + (pay*time*day) + "원");​
System.out.println("박** : " + (pay*time*day) + "원");​
System.out.println("유** : " + (pay*time*day) + "원");​

* 변수를 사용하는 이유(=장점)

1. 단 한 번의 값을 기록함으로써 필요할 때마다 재사용이 가능 -> 재사용성이 높아짐

 2. 변수는 값에 이름을 부여하기 위해 사용 -> 가독성이 높아짐

가독성과 재사용성이 높아지면 유지보수가 용이해짐

} //calpay() 끝

- 변수의 선언

public void declareVariable() {

* 변수 선언 방법

- int pay;

- 변수타입(자료형) 변수이름;

- 같은 타입의 변수를 선언할 때는 한꺼번에 선언할 수 있음 ex) int pay, day, time;

- 변수를 선언하고 난 뒤에 처음 값을 저장하는 것을 초기화(initialization)라고 함

- 초기화를 진행하여 넣어준 값을 초기값이라고 함

 

//System.out.println(pay);>에러: 변수는 { } 중괄호 안에서 선언되고 사용됨

* 식별자(Identifier)

: 클래스명, 메소드명, 변수명 등 사용자가 만들어서 이용하는 고유의 이름

 

- 식별자를 생성할 때 꼭 지켜야하는 규칙(안 지킬 시 안 만들어짐)

1. 대소문자를 구분하고 길이제한은 없음

2. 문자, 숫자, 특수문자(_ $)에 한해 사용가능

3. 문자 혹은 특수문자(_ $)로만 시작할 수 있음

4. 공백은 포함할 수 없음

5. 키워드(예약어)는 식별자로 사용할 수 없음

 

- 식별자 이름 규칙 (개발자들의 약속)

1. 클래스/인터페이스 이름 규칙

- 명사, 형용사를 서술적으로 연결해서 사용

- 첫 글자를 대문자로 표기

- 연결된 단어들의 첫 글자도 대문자로 표기

ex)HelloWorld

 

 2. 변수 이름 규칙

- 명사적의미를 갖게 만듬

- 첫글자를 소문자로 표기, 연결된 단어들은 대문자로 표기

ex) phoneNumber

 

 3. 메소드 이름 규칙

- 동사적 의미를 갖게 만듬

- 첫 글자는 소문자로 표기, 연결된 단어들은 대문자로 표기

- 메소드 명을 짓고나서 제일 뒤엔 한 쌍의 괄호 "()"가 붙음

- 메소드 명은 일반적으로 (_)를 사용하지 않음

 ex) calPay(), join()

 

 4. 상수 이름 규칙

 - 모든 문자를 대문자로 표기

 - 단어와 단어 사이는 (_)을 사용해서 구분한다.

 ex) LOGIN_OK

 

- 변수의 자료형

 1. 논리형 자료형(논리값: true, false)

- 논리형 자료형에는 true와 false가 존재함

 

boolean isTure; // 1byte, 변수선언

isTure = true; // 변수 초기화

boolean isFalse = false; //변수선언과 동시에 변수초기화 (**순서는 boolean isFalse > false > = )

 2. 숫자형 자료형

1) 정수형 (4가지 유형)

- 정수형 예약어는 byte, short, int, long형이 있고, 주로 int사용

- 정수형의 기본형이 int이고, long형을 사용할 때에는 할당할 숫자 뒤에 "L"을 붙여야 함

 

2) 실수형 (2가지 유형)

- 실수형 예약어는 float, double이라는 키워드를 사용하고, 주로 double사용

- float형을 사용하려면 할당할 숫자 뒤에 "F"를 붙여야 함

2_1. 정수형

byte bNum = 1; //1byte

short sNum = 2; //2byte

int iNum = 3; //4byte

long lNum = 4L; //8byte

//자릿수가 클 경우에 읽기 쉽기 위해 3자리 수마다 _로 구분 ex) 999_999_999

2_2. 실수형

float fNum = 2.22f; //4byte

double dNum = 3.3333; //8byte

3.문자형

char ch;

ch = 'a'; //단일문자에는 반드시 홀따옴표를 붙여줌

4.문자열형: 참조자료형 -> 주소를 담는다!

String str;

str = "abc";

1. 9개의 자료형을 선언함

2. 9개의 값의 초기화를 진행함

3. 9개의 값이 제대로 들어갔는 지 확인해보기

 변수이름: XX

System.out.println("isTure: "+ isTure);​
System.out.println("isfalse: "+ isFalse);
System.out.println("bNum: "+ bNum);​
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);​
System.out.println("ch: "+ ch);​
System.out.println("str: "+ str);

- 출력문의 종류

1. System.out.println(); => 줄바꿈을 해줌

2. System.out.print(); => 줄바꿈하지 않는다.

3. System.out.printf("출력하고자 하는 데이터 형식"); => f는 format, 줄바꿈은 해주지 않음.

System.out.printf("isTrue의 값은 %b입니다.\n",isTure);​
//isTure의 값은 false입니다.

//=> 구멍 개수와 매꿀 변수 개수와 순서, 종류가 명확해야한다.

System.out.printf("isFalse의 값은 %b입니다.\n",isFalse);​
//%b: true, false 논리형 변수를 담을 수 있게 뚫어주는 구멍

System.out.printf("sNum의 값은 %d입니다.\niNum의 값은 %d입니다.\n",sNum,iNum);​
//%d: byte, short, int, long 정수형 변수를 담을 수 있게 뚫어주는 구멍

System.out.printf("fNum의 값은 %.1f입니다.\ndNum의 값은 .2%f입니다.\n",fNum,dNum);
//%f: float, double 실수형 변수를 담을 수 있게 뚫어주는 구멍

//소수점아래 7번째 자리에서 반올림해서 6번째까지만 출력이 되는 형식 .1=소수점 1번째까지로 표현 가능

System.out.printf("개행은 \\n을 사용합니다."); // \n(개행문자)를 인출하고 싶을 땐 \\n 한번 더 입력
//문자 %c, %s, %C, %S

 

- 상수(수학적의미): 리터럴

-상수(프로그램언어의 상수) : 변경하지 않을 변수

public void constant() {

int khNum;

khNum =1;
System.out.println(khNum);​

khNum =2;
System.out.println(khNum);

// 1760년부터 올해의 년도까지를 계산하는 메소드

// 1760년이라는 숫자는 바뀌지 않으므로 상수로 선언

//[표현법] final 자료형 상수이름;

final int START_YEAR = 1760;
double PI = 3.14;
}
}

# B_KeyboardInput.java(variable)

package com.kh.variable;

import java.util.Scanner;//1단계

public class B_KeyboardInput {

- 키보드로부터 사용자의 입력값을 받으려면?

* System.out

 자바에서 이미 제공하고 있는 Scanner라는 클래스를 사용

 Scanner안에 있는 메소드들을 호출해서 사용

 

public void inputTest() {

Scanner sc = new Scanner(System.in);

- System.in : 입력받은 값들을 받아들이겠다. (바이트 단위로)

 

사용자의 인적사항을 입력받아 출력해보기

​1. 입력받고자 하는 내용을 먼저 질문해서 입력을 유도

System.out.println("당신의 이름은 무엇입니까?: ");

2. 사용자가 입력한 값을 문자열로 받아오는 메소드

- nextLine(), next()

- nextLine() : 사용자가 입력한 값 중 공백과 무관하게 한 문장을 다 읽어옴, 개행문자를 만나기 전까지

String name = sc.next();

3. 입력 버퍼를 지나 메모리로 들어가게 됨

System.out.println(name + "님 안녕하세요?");

// nextInt();

// nextDouble();

System.out.println("당신의 나이는 몇살입니까?: ");​
int age = sc.nextInt();

System.out.println("당신의 나이는 " + age + "살 입니다.");​

System.out.println("당신의 키는 몇입니까?(소수점 첫 번째자리까지 입력해주세요):");​
double height = sc.nextDouble();

System.out.println("당신의 키는 " + height + "cm 입니다.");​

//nextLine(): 버퍼에서 개행문자 이전까지의 모든 값을 가져온 후 "엔터"를 비워주는 역할

sc.nextLine();

System.out.println("주소가 어떻게 되세요?: ");​
String address = sc.nextLine();

// next(): 사용자가 입력한 값 중 공백이 있을 경우 공백 이전까지만 입력받음

System.out.println("주소: " + address);​

}
}

 


# Casting.java(variable)

package com.kh.variable;

public class Casting {

 

- 형변환(Type Casting): 값의 종류, 자료형을 바꾸는 개념

 

* 컴퓨터 안에서 값을 처리하는 규칙

 

 1. =(대입연산자)를 기준으로 왼쪽, 오른쪽 같은 자료형이여야 한다.

 => 같은 자료형에 해당하는 리터럴 값만 대입이 가능, 왼쪽은 공간 오른쪽은 값

=> 자료형이 다를 경우? == 값을 바꿔서 대입해야 함.

 

 2. 같은 자료형들끼리만 연산이 가능함

 => 다른 자료형들끼리 연산을 하고 싶다? 둘 중에 하나를 "형변환"을 해서 나머지 하나와 동일하게 만들어야 함

 

 3. 연산의 결과물도 같은 자료형이어야 함

 ex) 1 + 1 = 2(정수), 1.1 + 1.1 = 2.2(실수)

 

 [ 표현법 ] (바꿀자료형)값

 형변환 연산자, cast 연산자

 

* 형변환의 종류

 

 1. 자동형변환(Promotion): 자동으로 형변환이 진행

 작은 크기의 자료형 -> 큰 크기의 자료형

내가 형변환을 할 필요가 없음

 

 2. 강제형변환(Type Casting): 자동형변환이 이루어지지 않은 경우 진행

 직접 내가 형변환을 해야할 때 -> ()을 통해서 진행

 큰 크기의 자료형 -> 작은 크기의 자료형

 => 값의 손실이 발생할 수 있으므로 신중하게 해야함

 

- 자동형변환: 작은 바이트 -> 큰 바이트

public void autoCasting() {

특이케이스1. int(4Byte, 정수) -> double(8Byte, 실수)

int i1 = 10;

//System.out.println(i1);

double d1 = i1;

//System.out.println(d1); //자동 형변환 됨 작은크기 자료형(int) -> 큰 크기 자료형(double)​

// 변수는 공간이기 때문에 i1의 값은 변하지 않음.(공간자체가 다르기 때문)

// int는 정수 double은 실수, d1 = 10 -> 10.0

특이케이스2. int(4Byte, 정수) -> long(8Byte, 정수)

int i2 = 120000;

long l3 = i2;

//System.out.println(l3);

특이케이스3. long(8Byte, 정수) -> float(4Byte, 실수) 자동 형변환 가능

정수가 실수로 담길 때 큰 사이즈의 정수가 작은 사이즈의 실수에 대입이 가능

왜? 4Byte float형이 long형보다 담을 수 있는 값의 범위가 더 크기 때문에

long l4 = 100000L;

float f5 = l4;

//System.out.println(f5);​

특이케이스4. char(2Byte) <-> int(4byte)

// 아스키코드표

char ch = 98; // ch를 문자형으로 다룸, 98을 아스키문자로 변환

char ch2 = 'b';

//System.out.println(ch + "는" + ch2 + "이다");​

int num = ch; // ch를 정수로 다룸

//System.out.println(num);​

/*

System.out.println('b'); // -> b​

System.out.println((int)'b'); // -> 98

System.out.println('b' + 2); // -> 100​

System.out.println('b' + (char)2); // -> 100, 98 + 2(char+char=int형변환 계산)​

System.out.println('b' + (char)'2'); // -> 148, 문자 2는 50 + b(98) ​

System.out.println((char)2 + (char)'2');​ //char형은 int로 자동으로 형변환되어 계산됨. 2 + 50(문자형 2를 변환한 값)

- 비교 연산자

: 좌항과 우항의 값을 비교해서 결과값 반환

: 논리값 true, false

:  ==

System.out.println(1 == 1); ​

// 해석할 때 의문문으로 해석, 1이 1과 같니?

System.out.println(2 == '2'); // false​
System.out.println('a' == 'c'); // false​


System.out.println(2 == (int)'2'); // false 2와 50이 같니?​
System.out.println((char)2 == '2'); // false 이상한 문자랑 2가 같니?​
System.out.println((int)'2' == '2'); // true

특이케이스5. byte, short간의 연산

// -128 ~ 127

byte b1 = 126;

byte b2 = 2;

System.out.println(b1 + b2);​

// 결과값이 int형 -> CPU가 값을 처리, 기본크기가 int형의 크기(4byte)

byte b3 = (byte)128;

System.out.println(b3); // -128 오버플로우 발생

- 강제형 변환: 큰 바이트 -> 작은 바이트

public void forceCasting() {

//명시적 형변환이라고도 함

//(바꿀 자료형)값

1. double(8byte) -> float(4byte)

double d2 = 8.0;

float f1 = (float)d2;

System.out.println(f1);

2. double(8byte) -> int(4byte)

double d3 = 10.123123;
int i4 = (int)d3;

System.out.println(i4);​
// 0.123123 소수점 뒷 부분이 데이터 손실됨.

int iNum = 10;
double dNum = 1.56;
double dNum2 = 0.57;

//BigDecimal = 소수점 절삭 나중에 배울 예정

//System.out.println(iNum + dNum);​ //11.23, double로 자동 형변환
System.out.println((int)(dNum + dNum2));​ // 괄호로 묶지 않으면, (int)dNum이 우선순위가 되어 다른 값이 출력됨

}

}

# Run.java(variable)

package com.kh.variable;

//import com.kh.variable.A_Variable;​
//import com.kh.variable.B_KeyboardInput;

//1단계: 내가 사용하고자 하는 클래스의 경로 적기 (같은 클래스에 있으면 클래스 import안해도 되지만, 다른 클래스에 있으면 해야함)​

 

public class Run {

public static void main(String[] args) {

//A_Variable 클래스의 calPay()를 호출

//2단계(생성): 클래스를 대표할 이름 써주기

A_Variable a = new A_Variable();
//a.calPay();
//a.declareVariable();
//a.constant();

B_KeyboardInput b = new B_KeyboardInput();
//b.inputTest();

Casting c = new Casting();
c.autoCasting();
c.forceCasting();
}
}