λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

java

2μž₯. μžλ£Œν˜•

β… . λ³€μˆ˜μ™€ μžλ£Œν˜•

 

1. μžλ£Œν˜• μ„ μ–Έν•˜κΈ°

  • λ³€μˆ˜ : λ©”λͺ¨λ¦¬ 곡간에 값을 μ €μž₯ν•  곡간에 λΆ€μ—¬λœ 이름
  • μžλ£Œν˜• : μ €μž₯ν•  수 μžˆλŠ” κ°’μ˜ ν˜•νƒœ(μ’…λ₯˜, νŠΉμ§•)
  • μžλ°” ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“  λ³€μˆ˜/μƒμˆ˜λŠ” μžλ£Œν˜•μ„ μ„ μ–Έ ν›„ μ‚¬μš© κ°€λŠ₯
  • ν•œλ²ˆ μ„ μ–Έλœ μžλ£Œν˜•μ˜ λ°μ΄ν„°λŠ” λ³€κ²½ν•  수 μ—†λ‹€
// μžλ£Œν˜• λ³€μˆ˜λͺ…; 으둜 μ„ μ–Έ
int a = 3; // (O)
b = 5; // (X)

String c;
c = "μ•ˆλ…•" // (O)
  • μžλ°” 슀크립트, νŒŒμ΄μ¬κ°™μ€ 슀크립트 μ–Έμ–΄λŠ” μžλ£Œν˜• μ„ μ–Έ 없이 λ³€μˆ˜ μ‚¬μš©μ΄ κ°€λŠ₯

2. λ³€μˆ˜ μ‚¬μš©ν•˜κΈ°

 1) λ³€μˆ˜ μ„ μ–Έκ³Ό ν•¨κ»˜ κ°’ λŒ€μž…ν•˜κΈ°

// μžλ£Œν˜• λ³€μˆ˜λͺ… = κ°’;
int a = 3;

 2) λ³€μˆ˜ μ„ μ–Έκ³Ό κ°’ λŒ€μž… λΆ„λ¦¬ν•˜κΈ°

// μžλ£Œν˜• λ³€μˆ˜λͺ…;
// λ³€μˆ˜λͺ… = κ°’;
int a;
a = 3;

이 λ•Œ int a;μ—μ„œ 끝내도 λ”±νžˆ 였λ₯˜λŠ” μ•ˆλ‚˜μ§€λ§Œ, a의 값을 λΆˆλŸ¬μ˜€λŠ” μ½”λ“œλ₯Ό λ„£κ²Œ 되면 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€. λ•Œλ¬Έμ— a = 3으둜 인해 λ³€μˆ˜ a에 κ°’ 3이 μž…λ ₯λ˜λ―€λ‘œ a의 값을 뢈러였면 3이 좜λ ₯λœλ‹€.

 

 

β…‘. 이름 μ§“κΈ°

1. 이름 μ§“κΈ° κ·œμΉ™

  λ³€μˆ˜, μƒμˆ˜, λ©”μ„œλ“œμ˜ 이름을 지을 λ•ŒλŠ” λ‹€μŒκ³Ό 같은 4κ°€μ§€ κ·œμΉ™μ„ μ§€μΌœμ•Ό ν•œλ‹€.

  • 영문 λŒ€μ†Œλ¬Έμžμ™€ ν•œκΈ€ μ‚¬μš© κ°€λŠ₯(ν•œκΈ€μ€ ꢌμž₯ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€) : abc(O), ABC(O), aBc(O), κ°€λ‚˜λ‹€(O)
  • 특수 λ¬ΈμžλŠ” 밑쀄(_)κ³Ό λ‹¬λŸ¬($)만 μ‚¬μš© κ°€λŠ₯ : $abc(O), _abc(O), ab_c(O), $abc_(O)
  • 아라비아 숫자 μ‚¬μš© κ°€λŠ₯ν•˜λ‚˜, 첫 번째 κΈ€μžλ‘œλŠ” μ‚¬μš© λΆˆκ°€λŠ₯ : a3bc(O), abc3(O), 3abc(X)
  • μžλ°”μ—μ„œ μ‚¬μš©ν•˜λŠ” μ˜ˆμ•½μ–΄λŠ” μ‚¬μš© κΈˆμ§€ : int(X), break(X), public(X), static(X)

 

 

2. 이름 μ§“κΈ° ꢌμž₯ 사항

 λ³€μˆ˜, μƒμˆ˜, λ©”μ„œλ“œλ“€μ€ 이름과 κ΅¬μ‘°λ§ŒμœΌλ‘œλ„ ꡬ뢄할 수 있게 ν•˜λŠ” 것이 핡심이며, 이λ₯Ό ꡬ뢄할 λ•Œ ꢌμž₯ν•˜λŠ” 사항듀이 μžˆλ‹€.

  1) λ³€μˆ˜λͺ…, λ©”μ„œλ“œλͺ…

   μ°Έκ³ λ‘œ λ©”μ„œλ“œλͺ…은 이름 뒀에 μ†Œκ΄„ν˜Έμ™€ μ€‘κ΄„ν˜Έκ°€ λΆ™λŠ”λ‹€.

  • 영문 μ†Œλ¬Έμžλ‘œ μ‹œμž‘ : avg, name, value
  • 영문 단어λ₯Ό 2개 이상 κ²°ν•© μ‹œ μƒˆ λ‹¨μ–΄μ˜ 첫 κΈ€μžλ₯Ό λŒ€λ¬Έμžλ‘œ 함 : myWork, maxValue, bestPosition, ourClassNum

  2) μƒμˆ˜λͺ…

  • λ³€μˆ˜μ™€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ ν‘œκΈ°
  • 단어가 μ—¬λŸ¬ 개 κ²°ν•© μ‹œ 가독성을 μœ„ν•΄ 밑쀄을 μ‚¬μš©ν•΄ 뢄리 ex) MY_DATA

3. λ³€μˆ˜μ˜ 생쑴 κΈ°κ°„

 λ³€μˆ˜λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μ—΄λ¦° μ€‘κ΄„ν˜Έ({)의 쌍인 λ‹«νžŒ μ€‘κ΄„ν˜Έ(})λ₯Ό λ§Œλ‚  λ•Œ λ©”λͺ¨λ¦¬μ—μ„œ μ‚­μ œλœλ‹€.

package sec01_datatype.EX03_RangeOfVariableUse;

public class RangeOfVariableUse {
	public static void main(String[] args) {
    	int value1 = 3; // λ³€μˆ˜ value1이 μƒμ„±λ˜λŠ” μ‹œμ 
        {
        	int value2 = 5; // λ³€μˆ˜ value2κ°€ μƒμ„±λ˜λŠ” μ‹œμ 
            System.out.println(value1);
            System.out.println(value2);
        } // λ³€μˆ˜ value2κ°€ μ‚¬λΌμ§€λŠ” μ‹œμ 
        System.out.println(value1);
        // System.out.println(value2); // 였λ₯˜
    } // λ³€μˆ˜ value1이 μ‚¬λΌμ§€λŠ” μ‹œμ 
}

 

β…’. μžλ£Œν˜•μ˜ μ’…λ₯˜

ꡬ뢄 μ €μž₯κ°’ μžλ£Œν˜•
κΈ°λ³Έ μžλ£Œν˜• μ°Έ(true), κ±°μ§“(false) boolean
μ •μˆ˜ byte, short, int, long
μ‹€μˆ˜ float, double
문자(μ •μˆ˜) char
μ°Έμ‘° μžλ£Œν˜• 객체(Object) λ°°μ—΄, 클래슀, μΈν„°νŽ˜μ΄μŠ€

 

1. κΈ°λ³Έ μžλ£Œν˜•κ³Ό μ°Έμ‘° μžλ£Œν˜•μ˜ 차이

 1) μ‹€μ œ 데이터 κ°’μ˜ μ €μž₯ μœ„μΉ˜

  λ‘˜μ˜ μ €μž₯ μœ„μΉ˜μ˜ 차이점을 μ•Œμ•„λ³΄κΈ° 전에 λ©”λͺ¨λ¦¬μ˜ ꡬ쑰에 λŒ€ν•΄ μ•Œμ•„λ³Ό ν•„μš”κ°€ μžˆλ‹€. λ©”λͺ¨λ¦¬λŠ” λͺ©μ μ— 따라 크게 3κ°€μ§€ μ˜μ—­μœΌλ‘œ λ‚˜λ‰œλ‹€.


class μ˜μ—­
static μ˜μ—­
final(μƒμˆ˜) μ˜μ—­
method μ˜μ—­

stack μ˜μ—­  heap μ˜μ—­

  클래슀 μ˜μ—­(= 정적 μ˜μ—­, μƒμˆ˜ μ˜μ—­, λ©”μ„œλ“œ μ˜μ—­)κ³Ό λ³€μˆ˜λ“€μ΄ μ €μž₯λ˜λŠ” 곡간인 μŠ€νƒ μ˜μ—­, 객체듀이 μ €μž₯λ˜λŠ” 곡간 νž™ μ˜μ—­μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

λ³€μˆ˜ b의 μ‹€μ œ λ³€μˆ«κ°’μ€ "μ•ˆλ…•", λ³€μˆ«κ°’μ΄ μ €μž₯된 νž™ λ©”λͺ¨λ¦¬μ˜ μœ„μΉ˜κ°’μ€ 100이닀.

  κΈ°λ³Έ μžλ£Œν˜•κ³Ό μ°Έμ‘° μžλ£Œν˜•μ€ κ°’ μ €μž₯ 방식이 μ„œλ‘œ λ‹€λ₯΄λ‹€.

  • λ‘˜ λ‹€ λ³€μˆ˜μ˜ 곡간은 μŠ€νƒ λ©”λͺ¨λ¦¬μ— 생성
  • κΈ°λ³Έ μžλ£Œν˜•μ€ μŠ€νƒ λ©”λͺ¨λ¦¬μ— μƒμ„±λœ 곡간에 λ³€μˆ˜μ˜ 값을 μ €μž₯
  • μ°Έμ‘° μžλ£Œν˜•μ€ νž™ λ©”λͺ¨λ¦¬μ— μ‹€μ œ 데이터 κ°’, μŠ€νƒ λ©”λͺ¨λ¦¬μ˜ λ³€μˆ˜ κ³΅κ°„μ—λŠ” μ‹€μ œ λ³€μˆ«κ°’μ΄ μ €μž₯된 νž™ λ©”λͺ¨λ¦¬μ˜ μœ„μΉ˜κ°’ μ €μž₯

 2) μžλ£Œν˜•μ˜ 이름 κ·œμΉ™ (ν•„μˆ˜X, κΆŒκ³ μ‚¬ν•­)

  • κΈ°λ³Έ μžλ£Œν˜•μ˜ 이름은 μ†Œλ¬Έμžλ‘œ μ‹œμž‘ ex) int, double
  • μ°Έμ‘° μžλ£Œν˜•μ˜ 이름은 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ ex) String, System
  • μ˜ˆμ™Έλ‘œ κΈ°λ³Έ μžλ£Œν˜•μ„ μ›μ†Œλ‘œ ν•˜λŠ” λ°°μ—΄ μ°Έμ‘° μžλ£Œν˜•μ€ int[], double[] 처럼 μ†Œλ¬Έμžλ‘œ μ‹œμž‘

 

2. κΈ°λ³Έ μžλ£Œν˜•μ˜ 크기와 κ°’μ˜ λ²”μœ„

μžλ£Œν˜• 자료의 크기 κ°’μ˜ λ²”μœ„
λΆ€μšΈλŒ€μˆ˜ boolean 1byte true, false
μ •μˆ˜ byte 1byte -2^7 ~ 2^7-1
short 2byte -2^15 ~ 2^15-1
int 4byte -2^31 ~ 2-1
long 8byte -2^63 ~ 2^63-1
μ‹€μˆ˜ float 4byte ±(1.40x10^-45 ~ 3.40x10^38)
double 8byte ±(4.94x10^-324 ~ 1.79x10^308)
문자(μ •μˆ˜) char 2byte μœ λ‹ˆμ½”λ“œ 문자 (0~2^16-1)

 

1. λΆ€μšΈλŒ€μˆ˜ μžλ£Œν˜• boolean(1byte)

  • boolean은 true와 false κ°’λ§Œ μ €μž₯ κ°€λŠ₯
  • 자료 처리의 μ΅œμ†Œ λ‹¨μœ„κ°€ 1byte이기 λ•Œλ¬Έμ— 8bit 쀑 μƒμœ„ 7bitλŠ” μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ‚˜λ¨Έμ§€ 1bit만 μ‚¬μš©

 

2. μ •μˆ˜ μžλ£Œν˜• byte(1byte), short(2byte), int(4byte), long(8byte)

  • n개의 bit둜 ν‘œν˜„ν•  수 μžˆλŠ” μ •μˆ˜λŠ” 2^nκ°œμ΄λ‹€. ex) n이 2일 λ•Œ, 00, 01, 10, 11 총 4(2²)개
  • λ©”λͺ¨λ¦¬μ˜ νš¨μœ¨μ„±μ„ μœ„ν•΄ 같은 μ •μˆ˜λ₯Ό 담더라도 μ’…λ₯˜λŠ” 4가지이며, λŒ€μž… μ—°μ‚°μž(=)λ₯Ό μ€‘μ‹¬μœΌλ‘œ μ–‘μͺ½ μžλ£Œν˜•μ΄ κ°™μ§€ μ•ŠμœΌλ©΄ 문법 였λ₯˜κ°€ λ°œμƒν•œλ‹€.
  • byte, short에 μ €μž₯ν•  수 μ—†λŠ” λ²”μœ„μ˜ μ •μˆ˜ λ¦¬ν„°λŸ΄, int, long에 μ •μˆ˜ λ¦¬ν„°λŸ΄μ„ μž…λ ₯ν•  λ•Œ λͺ¨λ‘ int μžλ£Œν˜•μœΌλ‘œ 인식
  • μ •μˆ˜ λ¦¬ν„°λŸ΄ 뒀에 long을 λ‚˜νƒ€λ‚΄λŠ” L(μ†Œλ¬Έμžλ„ κ°€λŠ₯)을 λΆ™μ—¬ ν‘œκΈ°ν•˜λ©΄ long μžλ£Œν˜•μœΌλ‘œ 인식함
byte a = 3; // byte둜 인식
short a = 3; // short둜 인식
byte a = 138; // int둜 인식
int a = 3; // int둜 인식
long a = 3; // int둜 인식 => μžλ™ νƒ€μž… λ³€ν™˜μ΄ λ°œμƒν•΄ long으둜 λ³€ν™˜ (결둠은 long)
long a = 3L; // long으둜 인식

 

3. μ‹€μˆ˜ μžλ£Œν˜• float(4byte), double(8byte)

  • μ‹€μˆ˜μ˜ μ €μž₯ 방식은 뢀동 μ†Œμˆ˜μ  방식(κ°€μˆ˜*λ°‘^μ§€μˆ˜)으둜 μ €μž₯됨
ꡬ뢄 λΆ€ν˜Έ λΉ„νŠΈ κ°€μˆ˜ λΉ„νŠΈ μ§€μˆ˜ λΉ„νŠΈ
float (32bit) 1 23 8
double (64bit) 1 52 11
  • 일반적으둜 float의 μ •λ°€λ„λŠ” μ†Œμˆ˜μ  7자리, double의 μ •λ°€λ„λŠ” μ†Œμˆ˜μ  15자리 정도
public class FloatVsDouble {
	public static void main(String[] args) {
    	// float의 정밀도 (λŒ€λž΅ μ†Œμˆ˜ 7자리)
        float f1 = 1.0000001f;
        System.out.println(f1); // 정상 좜λ ₯
        float f2 = 1.00000001f;
        System.out.println(f2); // 였차 λ°œμƒ
        
        // double의 정밀도(λŒ€λž΅ μ†Œμˆ˜ 15자리)
        double d1 = 1.000000000000001;
        System.out.println(d1); // 정상 좜λ ₯
        double d2 = 1.0000000000000001;
        System.out.println(d2); // 였차 λ°œμƒ
  • μžλ°”λŠ” μ‹€μˆ˜ λ¦¬ν„°λŸ΄μ„ double μžλ£Œν˜•μœΌλ‘œ μΈμ‹ν•˜μ§€λ§Œ, floatλ₯Ό λ‚˜νƒ€λ‚΄λŠ” F(μ†Œλ¬Έμž κ°€λŠ₯)λ₯Ό μ‹€μˆ˜ λ¦¬ν„°λŸ΄ 뒀에 뢙이면 float μžλ£Œν˜•μœΌλ‘œ 인식함
float a = 3.5; // μ‹€μˆ˜ λ¦¬ν„°λŸ΄μ€ 기본적으둜 double둜 인식 (μžλ™ νƒ€μž… λ³€ν™˜λ„ μ•ˆν•΄μ€Œ)
float a = 3.5F; // float둜 인식
double a = 5.8; // double둜 인식
double a = 5; // int둜 μΈμ‹ν•˜μ§€λ§Œ μžλ™ νƒ€μž… λ³€ν™˜μœΌλ‘œ double둜 인식됨
  • μžλ°”μ—μ„œλŠ” 값을 μ €μž₯ μžλ£Œν˜•μ„ κΈ°μ€€μœΌλ‘œ 좜λ ₯ν•œλ‹€.
public class PrimaryDataType_1 {
	public static void main(String[] args) {
    	// boolean : true / false
        boolean bool1 = true;
        boolean bool2 = false;
        System.out.println(bool1);
        System.out.println(bool2);
        System.out.println();
        
        // μ •μˆ˜(byte, short, int, long)
        byte value1 = 10;
        short value2 = -10;
        int value3 = 100;
        long value4 = -100L; // long μžλ£Œν˜•μœΌλ‘œ 인식
        System.out.println(value1);
        System.out.println(value2);
        System.out.println(value3);
        System.out.println(value4);
        System.out.println();
        
        // μ‹€μˆ˜(float, double)
        float value5 = 1.2F; // float μžλ£Œν˜•μœΌλ‘œ 인식
        double value6 = -1.5;
        double value7 = 5; // μžλ™ νƒ€μž… λ³€ν™˜
        System.out.println(value5);
        System.out.println(value6);
        System.out.println(value7); // μ‹€μˆ«κ°’μœΌλ‘œ 좜λ ₯ 
    }
}

 

4. 문자 μžλ£Œν˜• char

  • 문자λ₯Ό μž‘μ€λ”°μ˜΄ν‘œ ('') μ•ˆμ— ν‘œκΈ°ν•˜λ©°, μœ λ‹ˆμ½”λ“œ ν‘œλ₯Ό μ‚¬μš©ν•΄ 문자λ₯Ό νŠΉμ • μ •μˆ«κ°’μœΌλ‘œ λ°”κΏ” λ©”λͺ¨λ¦¬μ— μ €μž₯ν•œλ‹€. 문자λ₯Ό 읽을 λ•ŒλŠ” μ •μˆ˜λ₯Ό 읽어와 κ·Έ μ •μˆ˜μ— ν•΄λ‹Ήν•˜λŠ” 문자λ₯Ό 좜λ ₯ν•œλ‹€. 
  • char에 μ •μˆ«κ°’μ„ μ €μž₯해도 μœ λ‹ˆμ½”λ“œ ν‘œμ—λŠ” μ •μˆ˜λ“€λ„ 있기 λ•Œλ¬Έμ— μ •μˆ˜λ₯Ό μ €μž₯ν•˜κ³  읽을 수 μžˆλ‹€. λ‹€λ§Œ 문자 μžλ£Œν˜•μœΌλ‘œ μ €μž₯λμœΌλ―€λ‘œ λ¬Έμžκ°€ μ•„λ‹Œ 숫자둜 μ΄μš©ν•˜κ³  μ‹Άλ‹€λ©΄ μ΄λŠ” λ©”μ„œλ“œλ₯Ό 톡해 λ³€ν™˜ν•  수 μžˆλ‹€.
  • char μžλ£Œν˜•μ— μœ λ‹ˆμ½”λ“œ 값을 직접 μž…λ ₯ν•  λ•ŒλŠ” '\u+16μ§„μˆ˜ μœ λ‹ˆμ½”λ“œ'와 같이 μ‚¬μš©ν•œλ‹€. 2byte둜 16μ§„μˆ˜ 4자리둜 ν‘œν˜„ν•œλ‹€. 
// 문자둜 μ €μž₯ν•˜λŠ” 방법
char value1 = 'A';
char value2 = 'κ°€';
char value3 = '3'; // 숫자 3이 μ•„λ‹Œ 문자 3
System.out.println(value1);
System.out.println(value2);
System.out.println(value3);
System.out.println();

// μ •μˆ˜λ‘œ μ €μž₯ν•˜λŠ” 방법
char value4 = 65;
char value5 = 0xac00;
char value6 = 51;
System.out.println(value4);
System.out.println(value5);
System.out.println(value6);
System.out.println();

// μœ λ‹ˆμ½”λ“œλ‘œ 직접 μž…λ ₯
char value7 = '\u0041';
char value8 = '\uac00';
char value9 = '\u0033';
System.out.println(value7);
System.out.println(value8);
System.out.println(value9);

이 외에도 2μ§„μˆ˜, 8μ§„μˆ˜, 16μ§„μˆ˜λ‘œ μ €μž₯ν•  수 μžˆλ‹€.

char a = 'A'; // 문자
char b = 65; // 10μ§„μˆ˜
char c = 0b1000001; // 2μ§„μˆ˜
char d = 00101; // 8μ§„μˆ˜
char e = 0x0041; // 16μ§„μˆ˜
char f = '\u0041' // μœ λ‹ˆμ½”λ“œ

 

μ§„λ²•λ§ˆλ‹€ 숫자의 ν‘œν˜„ 방식이 λ‹€λ₯΄λ‹€.

  • 10μ§„μˆ˜ : 숫자 (ex. int a = 11 => 10μ§„μˆ˜ 11)
  • 2μ§„μˆ˜ : 0b + 숫자 (ex. int b = 0b11 => 10μ§„μˆ˜ 3)
  • 8μ§„μˆ˜ : 0 + 숫자 (ex. int c = 011 => 10μ§„μˆ˜ 9)
  • 16μ§„μˆ˜ : 0x + 숫자 (ex. int d = 0x11 => 10μ§„μˆ˜ 17)

μ½”λ“œμ—μ„œ 진법을 λ³€ν™˜ν•˜λŠ” 방법도 μžˆλ‹€.

  • 10μ§„μˆ˜ -> 2μ§„μˆ˜ : Integer.toBinaryString()
  • 10μ§„μˆ˜ -> 8μ§„μˆ˜ : Integer.toOctalString()
  • 10μ§„μˆ˜ -> 16μ§„μˆ˜ : Integer.toHexString()
  • 2μ§„μˆ˜ -> 10μ§„μˆ˜ : Integer.parseInt("2μ§„μˆ˜ 숫자", 2)
  • 8μ§„μˆ˜ -> 10μ§„μˆ˜ : Integer.parseInt("8μ§„μˆ˜ 숫자", 8)
  • 16μ§„μˆ˜ -> 10μ§„μˆ˜ : Integer.parseInt("16μ§„μˆ˜ 숫자", 16)

 

 

β…£. κΈ°λ³Έ μžλ£Œν˜• κ°„μ˜ νƒ€μž… λ³€ν™˜

  • boolean을 μ œμ™Έν•œ κΈ°λ³Έ μžλ£Œν˜• 7κ°œλŠ” νƒ€μž… λ³€ν™˜μ΄ κ°€λŠ₯함
  • 방법은 λ‹¨μˆœνžˆ λ³€ν™˜ λŒ€μƒ μ•žμ— (μžλ£Œν˜•)만 ν‘œκΈ°
  • μ •μˆ˜λ‚˜ 숫자 λ¦¬ν„°λŸ΄μ€ 숫자 뒀에 L, Fλ₯Ό λΆ™μ—¬ νƒ€μž… λ³€ν™˜μ„ μˆ˜ν–‰ν•  μˆ˜λ„ 있음
  • λ‹½, νƒ€μž… λ³€ν™˜ μˆ˜ν–‰ μ‹œ μ €μž₯ν•  수 μžˆλŠ” κ°’μ˜ λ²”μœ„λ‚˜ μ’…λ₯˜κ°€ λ‹¬λΌμ§€λ―€λ‘œ 값이 λ³€ν•  수 있음
// μΊμŠ€νŒ… 방법 1 : μžλ£Œν˜•
int value1 = (int)5.3; // 값이 5.3μ—μ„œ 5둜 λ³€κ²½λœλ‹€.
long value2 = (long)10;
float value3 = (float)5.8;
double value4 = (double)16;

// μΊμŠ€νŒ… 방법 2 : L, F
long value5 = 10L;
long value6 = 10l;
float value7 = 5.8F;
float value8 = 5.8f;

 

1. μžλ™ νƒ€μž… λ³€ν™˜(μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ), μˆ˜λ™ νƒ€μž… λ³€ν™˜(κ°œλ°œμžκ°€ 직접)

 

  크기(λ²”μœ„)κ°€ μž‘μ€ μžλ£Œν˜•μ„ 큰 μžλ£Œν˜•μ— λŒ€μž…μ‹œ 데이터 손싀이 λ°œμƒν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ νƒ€μž… λ³€ν™˜ μ‹€ν–‰ν•΄μ€€λ‹€. 이λ₯Ό 'μ—…μΊμŠ€νŒ…(up-casting)'이라고 ν•œλ‹€. 이 외에도 λͺ¨λ“  μ •μˆ˜ λ¦¬ν„°λŸ΄κ°’μ΄ int μžλ£Œν˜•μœΌλ‘œ μΈμ‹λ˜μ§€λ§Œ byteλ‚˜ short μžλ£Œν˜•μ— μ €μž₯ν•  수 μžˆλŠ” λ²”μœ„ λ‚΄μ˜ μ •μˆ˜ λ¦¬ν„°λŸ΄ 값이 λŒ€μž…λ  경우 μ—…μΊμŠ€νŒ…μ΄ μ•„λ‹ˆμ§€λ§Œ μžλ™ νƒ€μž… λ³€ν™˜μ„ 해주기도 ν•œλ‹€.

  λ°˜λŒ€λ‘œ 큰 μžλ£Œν˜•μ„ μž‘μ€ μžλ£Œν˜•μ— λŒ€μž…ν•˜λŠ” 것을 'λ‹€μš΄μΊμŠ€νŒ…(down-casting)'이라고 ν•˜λŠ”λ° λ°μ΄ν„°μ˜ 손싀이 λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ μžλ™ νƒ€μž… λ³€ν™˜μ΄ μ•ˆλ˜κ³  κ°œλ°œμžκ°€ 직접 νƒ€μž… λ³€ν™˜μ‹œμΌœμ•Ό ν•œλ‹€. 

μžλ£Œν˜•μ˜ 크기(μ €μž₯ν•˜λŠ” κ°’μ˜ λ²”μœ„) : byte < short < char < int < long < float < double

 

// μžλ™ νƒ€μž… λ³€ν™˜
float value1 = 3; // int => float μ—…μΊμŠ€νŒ…
long value2 = 5; // int => long μ—…μΊμŠ€νŒ…
double value3 = 7; // int => double μ—…μΊμŠ€νŒ…
byte value4 = 8; // int => byte
short value5 = 11; // int => short

// μˆ˜λ™ νƒ€μž… λ³€ν™˜
byte value6 = (byte)128; // int => byte λ‹€μš΄μΊμŠ€νŒ…
int value7 = (int)3.5; // double => int λ‹€μš΄μΊμŠ€νŒ…
float value8 = (float)7.00000005; // double => float λ‹€μš΄μΊμŠ€νŒ…

 

value6의 값은 -128이 λ‚˜μ˜€λŠ”λ°, μ •μˆ˜ν˜• μžλ£Œν˜•μ„ μž‘μ€ λ²”μœ„μ˜ μžλ£Œν˜•μœΌλ‘œ μΊμŠ€νŒ…ν•  λ•ŒλŠ” λ²”μœ„μ˜ λ°˜λŒ€μͺ½ λμ—μ„œλΆ€ν„° λ‹€μ‹œ μ‹œμž‘ν•˜λŠ” μ„œν˜λŸ¬ ꡬ쑰닀.

 

 

 

2. κΈ°λ³Έ μžλ£Œν˜• κ°„μ˜ μ—°μ‚°

 

  boolean을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€ κΈ°λ³Έ μžλ£Œν˜•μ€ μ„œλ‘œ μ—°μ‚°ν•  수 μžˆμ§€λ§Œ 같은 μžλ£Œν˜•λΌλ¦¬λ§Œ κ°€λŠ₯ν•˜λ©° κ²°κ³Ό λ˜ν•œ 같은 μžλ£Œν˜•μ΄λ‹€. 단, int보닀 μž‘μ€ μžλ£Œν˜•(byte, short) κ°„μ˜ μ—°μ‚° κ²°κ³ΌλŠ” intκ°€ λ‚˜μ˜¨λ‹€. CPUμ—μ„œμ˜ μ—°μ‚° μ΅œμ†Œ λ‹¨μœ„κ°€ int이기 λ•Œλ¬Έμ΄λ‹€.

int + long의 경우 μ—…μΊμŠ€νŒ…μ΄ λ˜μ–΄ long으둜 μžλ™ νƒ€μž… λ³€ν™˜μ„ ν•΄ long+long=long으둜 κ³„μ‚°ν•œλ‹€.

// 같은 μžλ£Œν˜• κ°„μ˜ μ—°μ‚°
int value1 = 3+5;
int value2 = 8/5; // int/int=int
float value3 = 3.0f+5.0f;
double value4 = 8.0/5.0;

byte data1 = 3;
byte data2 = 5;
byte value5 = data1+data2; // data1 + data2λŠ” intν˜•μ΄λ―€λ‘œ 였λ₯˜ λ°œμƒ

// λ‹€λ₯Έ μžλ£Œν˜• κ°„μ˜ μ—°μ‚°
int value6 = 5+3.5 // 5+3.5λŠ” doubleν˜•μ΄λ―€λ‘œ 였λ₯˜ λ°œμƒ
double value6 = 5+3.5;
int value7 = 5+(int)3.5;

double value8 = 5/2.0;
byte data3 = 3;
short data4 = 5;
int value9 = data3+data4;
double value10 = data3+data4; // data3+data4λŠ” intν˜•μ΄λ―€λ‘œ μžλ™ νƒ€μž… λ³€ν™˜ μˆ˜ν–‰, 좜λ ₯ μ‹œ 8.0으둜 좜λ ₯됨

 

'java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

1μž₯. μžλ°” μ‹œμž‘ν•˜κΈ°  (0) 2022.01.24