JAVA/이론 정리 및 예제

[JAVA/자바] #1_1 변수 - 정의와 자료형 / 예제

chaewon 2021. 7. 6. 17:52

변수의 정의

변수란 메모리 공간(RAM - 주기억장치)에 값을 기록하기 위한 공간 

RAM의 구성 - Stack, heap, static

 

자료형 (Data type)

데이터 자료형 byte (메모리 크기)
논리 boolean 1 byte
문자 문자 char 2 byte
문자열 String -
숫자 정수 byte 1 byte
short 2 byte
int 4 byte
실수 long 8 byte
float 4 byte
double 8 byte

chae -> sign bit가 없기 때문에 저장되는 범위가 달라진다.(0~6만)

 

 

리터럴

변수에 대입되는 값 자체를 의미한다. 

char = ‘ ‘
String = “ “
long = ~L;
float = ~f;

 

변수 선언

Stack에 값을 담을 수 있는 공간을 만든다.

int point;           // 변수의 선언 (자료형 변수명)
point = 100;       // 초기화 (공간 = 값)
int point = 100;  // 선언과 동시에 초기화
int total;            // 공간 생성
total = point;     // 공간 = (공간이 가지고 있는) 값

 

명명 규칙

대소문자를 구분한다.

String userName; // O
String username; // X

예약어를 사용하면 안된다.

// boolean true;              // 예약어 사용해서 컴파일 에러 발생
boolean True;                // 암묵적인 규칙에 의해 권장하지 않음

숫자로 시작하면 안된다.

int age1;
// int 1age;                 // 숫자로 시작해서 에러 발생

특수 문자는 '_'와 '$'만 허용한다.

// double sh@rp;             // 다른 특수 문자 사용시 에러 발생
double $harp;

여러 단어의 이름은 두 번째 단어의 앞 글자부터 첫 글자마다 대문자로 표기한다.

// 낙타봉 표기법(camel case)
String ageOfVampire;
String ageofvampire;        // 에러가 발생하지 않지만 권장하지 않음(큰일남)

한글 사용 가능

String 이름;

상수의 경우 대문자로 표기

final int AGE;              // final 상수 - 값을 바꾸지 못함
final int age;              // 암묵적인 규칙에 어긋남

상수는 단어와 단어 사이를 '_'로 구분한다.

final int NAXAGE;           // 암묵적인 규칙에 어긋남
final int MAX_AGE;

 


 

예제


A_명명규칙

/* 패키지 선언부
 * 클래스가 속한 패키지에 대한 선언을 반드시 해 주어야 한다.
 * 모든 클래스 파일의 가장 첫 줄에 작성한다.
 */
package com.kh.variable;

// 클래스 선언부
public class A_변수선언 {

	/* 패키지가 다르면 같은 이름의 클래스도 만들 수 있다.
	 * 클래스의 이름은 사실 패키지를 포함한 이름이다.
	 * ex) com.kh.variable.A_변수선언  <- 클래스의 fullName이다.
	 */
	public void declareVariable() {
		/* 숫자형 */
		// 정수형
		byte bnum;
		short snum;
		int inum;
		long lnum;
		
		// 실수형
		float fnum;
		double dnum;
		
		// 문자형
		char ch;
		
		// 논리형
		boolean isTrue;
		
		// 문자열(참조형)
		String str;
		
		// 변수 값 대입 후 출력
		bnum = 1;
		snum = 2;
		inum = 4; 
		lnum = 8L;
		
		fnum = 4.0f;    // float는 리터럴에 반드시 f를 붙여야 한다.
		dnum = 8.0;     // double은 실수 값을 바로 입력해도 된다.
		
		isTrue = true;  // true or false 값만 저장할 수 있다.
		
		ch = 'a';
		str = "a";      // 문자를 한 개만 써도 리터럴을 String 리터럴로 사용해야 한다.
		
		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("isTrue의 값 : " + isTrue);
		
		System.out.println("ch의 값 : " + ch);
		System.out.println("str의 값 : " + str);
	}
	
	public void initVariable() {
		// 변수의 선언과 동시에 초기화
		
		// 숫자형 
		// 정수형
		byte bnum = 1;
		short snum = 2;
		int inum = 4;
		long lnum = 8L;
		
		// 실수형
		float fnum = 4.0f;
		double dnum = 8.0;
		
		// 논리형
		boolean isTrue = true;
		
		// 문자형
		char ch = 'a';
		
		// 문자열
		String str = "a";
		
		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("isTrue의 값 : " + isTrue);
		
		System.out.println("ch의 값 : " + ch);
		System.out.println("str의 값 : " + str);
	}

	public void namingRuleTest() {
		// 1. 대소문자 구분한다.
		String userName;
		String username;
		
		// 2. 예약어를 사용하면 안된다.
		//boolean true;              // 예약어 사용해서 컴파일 에러 발생
		boolean True;                // 암묵적인 규칙에 의해 권장하지 않음
		
		// 3. 숫자로 시작하면 안된다.
		int age1;
		//int 1age;                 // 숫자로 시작해서 에러 발생
		
		// 4. 특수 문자는 '_'와 '$'만 허용한다.
		//double sh@rp;             // 다른 특수 문자 사용시 에러 발생
		double $harp;
		
		// 5. 여러 단어으이 이름은 두 번째 단어의 앞 글자부터 첫 글자마다 대문자로 표기
		//낙타봉 표기법(camel case)
		String ageOfVampire;
		String ageofvampire;        // 에러가 발생하지 않지만 권장하지 않음(큰일남)
		
		// 6. 한글 사용 가능(권장하지 않음 -> 운영체제별 인코딩 방식이 다름)
		String 이름;
		
		// 7. 상수의 경우 대문자로 표기
		final int AGE;              // final 상수 - 값을 바꾸지 못함
		final int age;              // 암묵적인 규칙에 어긋남
		
		// 8. 상수는 단어와 단어 사이를 '_'로 구분한다.
		final int NAXAGE;           // 암묵적인 규칙에 어긋남
		final int MAX_AGE;
	}

	public static void main(String[] args) {
		A_변수선언 test = new A_변수선언();
		//test.declareVariable();	// 변수 선언 후 초기화
		test.initVariable();		// 변수 선언과 동시에 초기화
		test.namingRuleTest();		// 명명규칙
	}

}

 

B_키보드입력테스트

package com.kh.variable;

import java.io.BufferedReader;   // 패키지 java.io의 BufferedReader 클래스를 이용 (재사용성)
import java.io.IOException;
import java.io.InputStreamReader;
// import java.util.Scanner;      // ctrl + 1

public class B_키보드입력테스트 {
	/*
	 * java.io 패키지에서 제공되는 클래스를 이용한 키보드 입력 테스트
	 */
	public void inputTest1() {
		// 구경용 코드
		BufferedReader br 
			  = new BufferedReader(new InputStreamReader(System.in));
		// println과 print는 줄 바꿈 차이이다.
		System.out.print("정수 한 개를 입력하세요 : ");
		
		try{
				// 입력한 글자를 문자열 형태로 읽어들임
				String value = br.readLine(); 
			
				// 에러 문자열에  *3을 할 수 없음
				// System.out.println("계산 결과 : " + (value * 3));
				
				// 문자열 형태의 숫자를 실제 숫자 데이터로 변환 : parsing
				int number = Integer.parseInt(value);
				
				System.out.println("계산 결과 : " + (number * 3));
		}catch(IOException e) {
				e.printStackTrace();
		}
	}
	public void inputTest2() {
		/* java.util 패키지의 Scanner 클래스 사용
		 * java 5버전 이후부터 추가됨
		 *
		 * 클래스의 fullName을 사용하면 import를 하지 않아도 된다.
		 * 입력을 받기위해서 필요한 구문
		 */
		java.util.Scanner sc = new java.util.Scanner(System.in);

		System.out.print("이름을 입력하세요 : ");
		String name = sc.nextLine();      		// 한 줄에 대한 정보를 읽어온다.
		System.out.print("나이를 입력하세요 : ");
		int age = sc.nextInt();           		// 정수 값을 읽어온다. parsing 필요없음 
		System.out.print("키(소수점 첫째 자리까지 입력) : ");
		double height = sc.nextDouble();  		// 실수로 값을 읽어온다.            		// runtime error - 실행 중 오류
		System.out.println(name + "님은" + age + "세 이며, 키는" + height + "cm 입니다.");
	}
	public static void main(String[] args) {
		B_키보드입력테스트 test = new B_키보드입력테스트();
		//test.inputTest1();
		test.inputTest2();
	}
}

 

C_변수값변경테스트

package com.kh.variable;

import java.util.Scanner;

public class C_변수값변경테스트 {

	public void changeValue() {
		// 변수 선언
		String name;             // 이름
		char gender;             // 성별
		int age;                 // 나이
		double height;           // 키
		
		// 초기화
		name = "김진호";
		gender = 'M';
		age = 20;
		height = 180.5;
		
		System.out.println(name + "님의 개인 정보");
		System.out.println("gender :" + gender);
		System.out.println("age : " + age);
		System.out.println("height : " + height);
		
		// 키보드로 입력 받아 변수에 저장된 값 변경
		Scanner sc = new Scanner(System.in);
		System.out.print("이름을 입력하세요 : ");
		name = sc.nextLine();                      //문자열
		System.out.print("성별을 입력하세요 : ");
		gender = sc.next().charAt(0);              //문자열 - 문자를 읽어오는 메소드가 없다. / charAt(0) -> 첫 번째 글자를 char로 반환
		System.out.print("나이를 입력하세요 : ");
		age = sc.nextInt();
		System.out.print("키를 입력하세요 : ");
		height = sc.nextDouble();
		 
		System.out.println(name + "님의 개인정보");
		System.out.println("gender : " + gender);
		System.out.println("age : " + age);
		System.out.println("height : " + height);
		
		String str = "안녕하세요";
		System.out.println(str.charAt(0));
		System.out.println("안녕하세요".charAt(0));
	}
	public static void main(String[] args) {
		C_변수값변경테스트 test = new C_변수값변경테스트();
		test.changeValue();
	}
}