Java 기본의 내용과 개념들을 튼튼하게 다져놓는것이 좋을 것 같아서

자바의 정석 유튜브로 더 배워보려고 한다 (출처 : 남궁성의 정석코딩 유튜브)

Chapter 1은 설치 과정이라 Chapter 2부터 시작함


Chapter 2. 변수

 

- 변수에 값 저장하기

 

‘=’는 등호가 아니라 대입

int age; // 정수(int)타입의 변수 age를 선언

age = 25; // 변수 age25를 저장

int age = 25; // 위의 두 줄을 한 줄로

 

- 변수의 초기화 변수에 처음으로 값을 저장하는 것

 

int x = 0; // 변수 x를 선언 후, 0으로 초기화

int y = 5; // 변수 y를 선언 후, 5로 초기화

int x = 0, y = 5; // 위의 두 줄을 한 줄로

 

변수는 클래스 변수, 인스턴스 변수, 지역 변수가 있음.

지역 변수는 읽기 전에 꼭 초기화 해야 함. 그렇지 않으면 컴파일할 때 오류가 생김.

 

- 값의 타입

 

문자 char

- 숫자 정수 byte, short, int, long

- 실수 float, double

 

논리 boolean - true

- false

 

8개를 기본형 타입이라고 함.

 

- 변수, 상수, 리터럴

 

변수(variable) : 하나의 값을 저장하기 위한 공간, 변경 가능.

상수(constant) : 한 번만 값을 저장 가능한 변수, 변경 불가능. final이란 키워드를 붙임.

리터럴(literal) : 그 자체로 값을 의미하는 것

 

ex)

 

int score = 100;

final int MAX = 200;

char ch = ‘A’;

String str = “abc”;

 

여기서 score, ch, str은 변수 / MAX는 상수 / 100, 200, ‘A’, “abc” 는 리터럴 이다.

 

- 리터럴의 접두사와 접미사

byte의 범위는 128~127 이다.

e310^3을 의미함. e210^2.

 

 

1) 범위가 변수 > 리터럴인 경우, OK

int i = ‘A’; // int > char , ‘A’는 문자코드 65이다.

long l = 123; // long > int

double d = 3.14f; // double > float

 

2) 범위가 변수 < 리터럴인 경우, Error

int I = 30_0000_0000; // int의 범위(-20~20)를 벗어남

long l = 3.14f; // long < float , float의 범위가 더 커서 long에 담을 수 없음

float f = 3.14; // float < double , double의 범위가 더 커서 float에 담을 수 없음

 

3) byte, short 변수에 int 리터럴 저장 가능

, 변수의 타입의 범위 이내여야 함

byte b = 100; // OK, byte의 범위(-128~127)에 속하기 때문

byte b = 128 ; // Error, byte의 범위를 벗어남

 

- 문자와 문자열

 

String s = “”; // 빈 문자열

char ch = ‘’; // Error

 

String s1 = “A” + “B” ; // “AB”

“” + 7 -> “” + “7” -> “7”

“” + 7 + 7 -> “7”+7 -> “7” + “7” -> “77”

7+7+“” -> 14+“” -> “14”+“”-> “14”

 

문자열 + any type -> 문자열

any type + 문자열 -> 문자열

 

public class VarEx3 {

	public static void main(String[] args) {
	final int score = 100;
	// score = 200; 상수라서 값이 변할 수 없음
	final int a;
	// System.out.println(a); 지역 변수 a는 초기화를 해야 사용할 수 있다
	boolean power = false; 
    // byte b = 128; -128~127 의 범위를 가짐
    int oct = 010; // 8진수, 10진수로 8
	int hex = 0x10; // 16진수, 10진수로 16
	long l = 10_000_000_000L; // int는 최대 20억 까지만 가능함
	float f = 3.14f;
	double d = 3.14f; // double이 float 보다 더 큰 범위를 가짐
	char ch = 'A';
	int i = 'A'; // A의 문자코드 65가 됨
	String str = "";
	String str2 = "ABCD";
	String str3 = "123";
	String str4 = str2 + str3;
	System.out.println(""+7+7); // 77
	System.out.println(7+7+""); // 14

	}

}

 

 

- 두 변수의 값 교환하기

 

public class VarEx2 {

public static void main(String[] args) {

	int x = 4, y = 2;
	int tmp;
	tmp = x; // x의 값을 tmp에 저장
	x = y; // y의 값을 x에 저장
	y = tmp; // tmp의 값을 y에 저장

	System.out.println("x="+x);

	System.out.println("y="+y);

	}
 
}

 

- 값의 타입

 

문자 char

- 숫자 정수 byte, short, int, long

- 실수 float, double

 

- 논리 boolean - true

- false

 

- 기본형과 참조형

 

1) 기본형(Primitive type)

- 오직 8(boolean, char, byte, short, int, long, float, double)

- 실제 값을 저장

 

2) 참조형(Reference type)

- 기본형을 제외한 나머지(String, System )

- 메모리 주소를 저장(4 byte 또는 8 byte)

 

Date today; // 참조형 변수 today를 선언

today = new Date(); // today에 객체의 주소를 저장

 

- 기본형의 종류와 크기

논리형 truefalse중 하나를 값으로 가지며, 조건식과 논리적 계산에 사용된다.

문자형 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.

정수형 정수 값을 저장하는데 사용된다. 주로 사용하는 것은 intlong이며,

byte는 이진 데이터를 다루는데 사용되며,

shortc언어와의 호환을 위해 추가되었다.(잘 안쓰임)

실수형 실수 값을 저장하는데 사용된다. floatdouble이 있다.

- 기본형의 표현 범위

 

n비트로 표현할 수 있는 값의 개수 : 2^n

n비트로 표현할 수 있는 부호없는 정수의 범위 : 0 ~ 2^n 1

ex) 8비트의 경우 0 ~ 255까지 가능

n비트로 표현할 수 있는 부호있는 정수의 범위 : -2^(n-1) ~ 2^(n-1) -1

ex) 1바이트의 경우 128 ~ 127까지 가능

 
 

                   (1byte = 8bit)

 

부호비트에 부호를 저장한다. 부호비트가 0이면 양수, 1이면 음수이다.

byte는 말 그대로 크기가 1byte이고 부호비트를 제외한 7bit에 값을 저장한다.

short는 크기가 2byte이고 15bit에 값을 저장한다.

char는 부호비트가 없으므로 16bit에 값을 저장한다.

int는 크기가 4byte이고 31bit에 값을 저장한다.

long은 크기가 8byte이고 63bit에 값을 저장한다.

 

 

 

floatdouble은 지수와 가수를 저장하여 수를 저장하게 된다.

floatdouble은 표현할 수 없는 범위가 존재한다.

정밀도는 가수에 따라 결정된다. (float7자리, double15자리)

 

 

- 형식화된 출력 printf()

 

println()의 단점 출력형식 지정 불가

1) 실수의 자리수 조절불가

System.out.println(10.0/3); // 3.333333333...

 

 

2) 10진수로만 출력된다

System.out.println(0x1A); // 26 (10진수)

 

printf()를 사용하면 출력형식이 지정 가능

System.out.printf("%.2f", 10.0/3); // 3.33 (소수점 둘째자리)

System.out.printf("%d", 0x1A); // 26 (10진수)

System.out.printf("%X", 0x1A); // 1A (16진수)

 

지시자를 통해서 원하는 진수로 값을 표현할 수 있다. (%s에서 sString을 의미함)

지시자에 #을 넣어서 결과값이 몇진수인지 나타낼 수 있다.

float는 정밀도가 7자리 이므로 그 뒤의 숫자는 의미없는 숫자가 붙는다.

%g를 지시자로 쓰면 간략한 형식으로 자동적으로 출력된다.

public class PrintfEx1 {

	public static void main(String[] args) {
		
		double f = 123.456789;
		System.out.printf("%f%n", f); // float
		System.out.printf("%e%n", f);  // 지수 형식
		System.out.printf("%g%n", f);  // 간략한 형식
		
		System.out.printf("[%5d]%n", 123); // 공백이 포함된 123
		System.out.printf("[%5d]%n", 1234567); //  1234567 그대로 출력됨
		System.out.printf("[%-5d]%n", 10); // 왼쪽으로 정렬됨
		System.out.printf("[%05d]%n", 10);  // 공백자리에 0이 들어감
		
		double d = 1.23456789;
		System.out.printf("%.6f%n", d); // 소수점 6자리까지 표현
		
		System.out.printf("[%s]%n", "www.codechobo.com");	
		System.out.printf("[%20s]%n", "www.codechobo.com");
		System.out.printf("[%-20s]%n", "www.codechobo.com");
		System.out.printf("[%.10s]%n", "www.codechobo.com"); // 10자리까지만 									 출력됨
	}

}

 

 

- 화면에서 입력받기, Scanner

Scanner는 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스

 

import java.util.Scanner;

public class ScanfEx1 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int num = sc.nextInt();
		int num2 = sc.nextInt();
		System.out.println(num);
		System.out.println(num2);
		
//		String input = sc.nextLine();
//		int num3 = Integer.parseInt(input);
		
//		System.out.println(num3);
		

	}

}

 

(입출력 관련 객체들은 사용 후 반드시 닫아줘야 함. 그런데 화면입력은 자동으로 닫아짐. close 메소드 안 써도 됨)

 

- 정수형의 오버플로우

오버플로우란 표현가능한 범위를 넘는 것

 

최대값 + 1 = 최소값 ex) 9999+1 = 0

최소값 1 = 최대값 ex) 0 1 = 9999

 

public class Ex2_11 {

	public static void main(String[] args) {
		short sMin = -32768, sMax = 32767;
		char cMin = 0, cMax = 65535;
		
		System.out.println("sMin = " + sMin); // short의 최소값
		System.out.println("sMin-1 = " + (short)(sMin-1)); // short 최소값에서 1을 뺌
		System.out.println("sMax = " + sMax); // short의 최대값
		System.out.println("sMax+1 = " + (short)(sMax+1)); // short의 최대값에서 1을 더함
		System.out.println("cMin = " + (int)cMin); 
		System.out.println("cMin-1 = " + (int)--cMin); 
		System.out.println("cMax = " + (int)cMax);
		System.out.println("cMax+1 = " + (int)++cMax);
		
	}

}

결과는 다음과 같다.

 

sMin = -32768

sMin-1 = 32767

sMax = 32767

sMax+1 = -32768

cMin = 0

cMin-1 = 65535

cMax = 65535

cMax+1 = 0

 

최소값에서 1을 빼면 최대값이 되고, 최대값에서 1을 더하면 최소값으로 바뀌는 것을 알 수 있다.

 

 

- 타입간의 변환방법

 

1) 문자(char)와 숫자간의 변환

숫자에 ‘0’을 더하면 문자가 되고 문자에서 ‘0’을 빼면 숫자가 된다.

 

2) 문자열(String)로의 변환

숫자나 문자에 “”(빈문자열)을 더하면 문자열이 된다.

 

3) 문자열을 숫자로 변환

Integer.ParseInt(“3”) 과 같은 메소드를 사용하면 된다.

 

 

public class Ex2_12 {

	public static void main(String[] args) {
		String str = "3";
		
		System.out.println(str.charAt(0) - '0'); // str을 char로 바꿔주고, 다시 숫자로 바꿔주었다
		System.out.println('3' - '0' + 1);
		System.out.println(Integer.parseInt("3")+1);
		System.out.println("3"+1);
		System.out.println((char)(3+'0'));

	}

}

출처 : Youtube 남궁성의 정석코딩

출처 : Youtube 남궁성의 정석코딩

출처 : Youtube 남궁성의 정석코딩

 

'Java > Java의 정석' 카테고리의 다른 글

220303 Java - Chapter 4. 조건문  (0) 2022.03.03
220302 Java - Chapter 3. 연산자(Operator)  (0) 2022.03.02
220228 Java - Thread  (0) 2022.02.28
220225 Java - IO  (0) 2022.02.25
220224 Java - Date, Calendar, time패키지  (0) 2022.02.24

+ Recent posts