on my way

이것이 자바다 Chapter02. 변수와 타입 본문

Computer Science/JAVA

이것이 자바다 Chapter02. 변수와 타입

wingbeat 2024. 3. 13. 14:04
반응형

Chapter2. 변수와 타입

2.1 변수 선언

변수 = 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름 (메모리에 저장된 값을 가르키는 주소)

  • 변할 가능성 (실행중)
  • 다른 곳에서 사용 (여러번)

선언과 초기화

무조건 데이터 타입을 명시해줘야 한다.

 자료형 변수명;

 

예를 들어 double로 선언 후에는 string 타입을 담을 수 없다.

정적 타이핑 (static typing)

동적 타이핑 (dynamic typing)

 

초기화: 처음하는 행동

변수명 = 값; // 대입
자료형 변순명 = 값; // 선언+초기화

 

변수명 명명규칙: 의미있는 이름

Camel : 대소문자 섞는 스타일. (자바는 주로)

- 자바소스 파일명(클래스) 대문자로 시작 → Week.java, MemberGrade.java

- 변수명은 소문자로 시작 → score, mathScore

Snake : _로 구분 (DB는 주로)

- student_name, student_last_name,

 

연산

대입연산 (우선순위 최하)

사칙연산

비교

논리

증감

삼항

package ch02.sec01

public class VariableExchangeExample {
	
	public static void main(String[] args) {
		int x = 1; 
		int y = 2;
		System.out.println("x:"+x+" y:"+y);
		
		int tmp = x;
		x = y;
		y = tmp;
		System.out.println("x:"+x+" y:"+y);
	}
}

 

2.2 정수 타입 (8가지)

자료형 구분

기본 자료형 (primitive type)

- 정수: byte, char, short, int(21억이하), long

- 실수: float, double

- 논리(t/f): boolean

- 문자 (char)

범위: int < long < double

 

참조 자료형 (reference type)

- 배열, 클래스, 인터페이스..

2.3-4 문자 실수 타입

Type mismatch: cannot convert from double to float

java는 타입이 다르면 처리할 수 없다.

		// 문자
		char c = 'A'; // ASCII코드 65
		System.out.println((char)(c+1));
		
		long a = 2200000000L; //2억은 range 초과
		// long도 int로 처리가 됨. 끝에 l을 붙여야 함.
		float b = 3.14f; // float 굳이 쓰기 X
		double d = 3.14;
		byte e = -128; // byte 범위 : -128~127
		
		// 10진수
		double x = 0.25;
		// e 또는 E 포함
		double x = 5e2; //5.0*10^2=500.0
		double y = 0.12E-2 //0.12*10^(-2)=0.0012

 

2.5 논리 자료형

기본 자료형 : primitive type (int, long, double, boolean)

참조 자료형 : reference type

		boolean stop = true;
		if (true) {
			System.out.println("STOP");
		} else {
			System.out.println("START");
		}
		
		int x = 10;
		boolean result1 = (x==20);
		boolean result2 = (x!=20);
		boolean result3 = (x>20);
		boolean result4 = (0<x && x<20);
		boolean result5 = (x<0 || x>200);

 

2.6 문자열 타입

‘ ’ 를 감싼 한개 문자는 char이지만,

“ “로 감싼 여러 문자는 유니코드로 변환되지 않는다.

String은 참조타입

char var1 = "A"; //compile error
char var2 = "홍길동"; //compile error

String var1 = "A";
String var2 = "홍길동";
package ch02.sec06;

public class StringExample {

	public static void main(String[] args) {
		String name = "홍길동";
		String job= "Programmer";
		System.out.println(name);
		System.out.println(job);
		
		String str = "나는 \\"자바\\"를 배웁니다.";
		System.out.println(str);
		
		str = "번호\\t이름\\t직업 ";
		System.out.println(str);
		
		System.out.println("나는\\n");
		System.out.println("자바를\\n");
		System.out.println("배웁니다.");
        
        String text = """나는
        자바를
        배웁니다.""";

	}
}

 

 

이스케이프 문자

\n, \t, \" 는 외우자.

 

String str1 = "" +
"{\n" +
"\t\"id\":\"눈송이\"\n"+
"}";

String str2 = """
{
    "id":"winter",
    "name":"눈송이"
}
""";
System.out.println(str1);
System.out.println("----------------------");
System.out.println(str2);
System.out.println("----------------------");

 

백엔드 할 때 자주 볼 JSON

이 표기법에 따라서 데이터를 주고 받을 때, 

 

2.7 자동 타입 변환

자동 타입(자료형) 변환 - 자동형변환

int < long < double

byte < short , char < int < long < float < double

-> 순서로는 가능

<- 순서로는 불가능

		byte byteValue = 10;
		int intValue = byteValue; // 자동형변환
		// byteValue = intValue; // error
		double doubleValue = intValue;
		System.out.println(doubleValue);
//		intValue = doubleValue;
		intValue = (int)doubleValue; // 강제형변환

 

2.8 강제 타입 변환

강제 타입(자료형) 변환 - 강제형변환

원본값 유지 X, 손실 발생 가능

		double pi = 3.14;
		int pi2 = (int)pi;
		System.out.println(pi2); // 손실 발생
		
		int x = 10;
		int y = 3;
		int z = 2;
		System.out.println((double)x/y); // 정수끼리 연산하면 결과는 무조건 정수
		
		int sum = x+y+z;
		double avg = sum / 3;
		System.out.println(avg);
		
		byte b1 = 1;
		byte b2 = 2;
//		byte b3 = b1+b2; //error: 연산은 int끼리 가능

 

 

팁!

ctrl+d 라인 삭제

shift+enter 그냥 줄바꿈 됨

이름 뒤 () 면 실행한다.

 

2.10 문자열을 기본 타입으로 변환

문자열끼리 비교를 하면 .equals() 써야한다.

		// 문자열 -> 기본자료형 : 클래스명.parse자료형(값)
		String s1 = "221";
//		int il = (int)s1; //error
		int il = Integer.parseInt(s1);
		System.out.println(il);
        
		String s2 = "true";
		boolean s21 = Boolean.parseBoolean(s2);
		if (s2 == "true") {
			System.out.println("true");
		} else {
			System.out.println("false");
		}

//		String s3 = new String("true");
		String s3 = "true";
		System.out.println(s3);
		System.out.println(s2 == s3);
		System.out.println(s2.equals(s3));
		
		// 기본자료형 -> 문자열 변환 : String.valueOf(값)
		String s4 = String.valueOf(1);
		System.out.println(s4);
		test(10);
	}

	
	static void test(int a) {
		System.out.println(a);
	}

 

 

2.11 변수 사용 범위 (scope)

모두 중괄호 기준에서 동작한다.

		String s2 = "true";
		if (s2 == "true") {
			int x2 = 1;
			System.out.println(x2);
			System.out.println("true");
		} else {
			System.out.println("false");
		}
		test(x2); //error
	}
	static void test(int a) {
		System.out.println(a);
	}
}

 

구조가 가장 중요하다.

구조는 모두 중첩, 중복된다.

블럭은 모두 중괄호로 묶인다.

 

2.12 콘솔로 변수값 출력

printf("형식문자열",값1,값2,...) => f - format(포맷팅)

s: string //전부 가능

d: decimal (숫자)

f: float(실수)

		System.out.printf("이름: %s", "김자바");
		System.out.printf("이름: %d\n", 25);
		System.out.printf("저의 이름은 %s입니다. %d살 입니다.", s2,Integer.parseInt(s1));

 

2.13 키보드 입력 데이터를 변수에 저장

Scanner scanner = new Scaner(system.in);

타입 / 변수 / = / 값 (이퀄의 오른쪽에는 무조건 값-객체)

scanner.nextLine(), nextInt()

package ch02.sec13;

import java.util.Scanner;

public class ScannerExample {

	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);

		System.out.print("x 값 입력: ");
		String strX = scanner.nextLine();
		int x = Integer.parseInt(strX);
		
		System.out.print("y 값 입력: ");
		String strY = scanner.nextLine();
		int y = Integer.parseInt(strY);
		
		int result = x+y;
		System.out.println("x + y: "+result);
		System.out.println();
		
		while(true) {
			System.out.print("입력 문자열: ");
			String data = scanner.nextLine();
			if(data.equals("q")) {
				break;
			}
			System.out.println("출력 문자열: "+data);
			System.out.println();
		}
		System.out.println("종료");
	}
}

 


확인문제

 

반응형