본문 바로가기
JAVA

[WEB]DAY2_변수, 자료형, 주소, 서식문자, 형변환, 입력메소드(1)

by 연곰2 2020. 2. 11.

변수

 : 변수는 저장공간이다. 

          x                           =                      0
  저장공간의 이름           대입연산자          값(상수)

 

 

변수선언시 주의사항 
     1. 변수명은 중복해서 선언할 수 없다. 
     2. 초기화를 해준다. 
     3. 되도록 선언부에 한꺼번에 선언한다.(메소드 상단) 

변수명 주의사항 
     1. 숫자는 맨 앞에 작성할 수 없다. (문자로 시작해야한다.) 
     2. 특수문자를 사용할 수 없다. (단, _는 사용가능하다.) 
     3. 되도록 소문자로 작성한다. 
     4. 공백은 사용할 수 없다. 
          good_boy 
          goodBoy : 카멜 표기법 

     5. 되도록 한글은 사용하지 않는다. 
     6. 뜻이 있는 단어를 선택한다. 
          a, b, c, d, e, ..(x) 
          data, number, name, age ,...(o) 

 

변수의 선언

     초기화 
     자료형 변수명 = 초기값; 

     자료형 변수명; 

변수 선언시 RAM 
     int x = 10; 

    → x라는 이름의 저장공간이 RAM에 할당되고  
        10이라는 값이 들어간다.

 

변수의 사용 
     변수명으로 안에 있는 값을 가지고 온다. 

     int age = 10;                /저장공간 
     age = 20;                    /저장공간 
     age + 7;                      /값 
     System.out.print(age);     /값 

 

변수를 사용하는 이유 
     1. 반복되는 값을 쉽게 관리하기 위해서 
     2. 값에 의미부여를 하기 위해서 

 



자료형

자료형 type byte  
정수형 int 4 0, -1, 234 ,... 
실수형

float 4 0.0F, -3.0F, 1.49F, ...
double 8 0.0, -0.3, 1.49 ,... 
문자형 char 2 'a', '0', '김',.. 
문자열 String ?? "0", "a", "ABC", "김밥",.. 

 

* C언어  아스키코드

  JAVA   아스키코드 + 유니코드

          (모든 언어 사용 가능. 그래서 2byte)

 

* int가 기본형인 이유

   32bit인 시절때부터 사용하던 것이기 때문에.

 

* double이 기본형인 이유

   실수의 경우, 자료형, 진수, 가수부분을 따로 저장하기 때문에

   나눠서 가져가는 것보다 8byte로 한번에 가져가는게 효율적이기 때문이다.

 

* float, double이 . 아래로 6번째 자릿수까지 나오는 이유

 


 

package day02;

public class Variable {
	public static void main(String[] args) {
		int data1 = 10;
		float data2 = 10.231F;
		double data3 = 10.231;
		char data4 = 'A';
		String data5 = "ABC";
		
		System.out.println(data1);
		System.out.println(data2);
		System.out.println(data3);
		System.out.println(data4);
		System.out.println(data5);
		
		
	}

}

 

* float data2 = 10.231F; 10.56이 8byte인데 float의 경우 4byte이므로 F를 붙여 8byte로 만든다.


주소(C언어)

저장공간이 RAM에 할당되면 고유한 값인 주소값이 부여된다.
이를 JAVA에선 해쉬값이라고 한다. 주소는 매번 바뀌지만 중복이 없다.


서식문자(format)

     반드시 따옴표 안에서 작성한다.

 

%d  : decimal(10진수 정수)
%o  : octal(8진수 정수)
%x : hexadecimal(16진수 정수)
%f : float(실수)
%c : char(문자)
%s : String(문자열)

 

* 서식문자를 이용할 경우 printf를 사용해야함.

 

* 프로그래머에겐 정수의 종류는

   음의 정수, 양의 정수, 0 .. 이 아니라 10진수, 16진수... 이다!

 


 

package day02;

public class Variable2 {

	public static void main(String[] args) {
		String name = "손서연";
		int age = 10;
		double height = 150.465;
		char grade = 'C';
		
		System.out.printf("이름 : %s\n", name);
		System.out.printf("나이 : %d살\n", age);
		System.out.printf("키 : %.2fcm\n", height);
		System.out.printf("학점 : %c\n", grade);
	}

}

 

* 소숫점 아래 6자리까지 나오는 이유

     : 7번째 자리부터는 값이 확실하지 않기 때문이다.

 

* %.2f 의 경우, 반올림된다.


 

package day02;

public class FormatTest {

	public static void main(String[] args) {
		
		String name = "뽀삐";
		int age = 2;
		double weight = 3.67;
		char condition = 'A';
		String owner = "손서연";
		
		//애완동물 이름 : 뽀삐
		String name_msg = "애완 동물 이름 :";
		//뽀삐 나이 :
		String age_msg = String.format("%s 나이 : ", name);
		//뽀삐 몸무게 :
		String kg_msg = String.format("%s 몸무게 : ", name);
		//뽀삐 상태 : A
		String condition_msg = String.format("%s 상태 : ", name);
		//뽀삐 주인 :
		String owner_msg = String.format("%s 주인 : ", name);
		
		System.out.printf("%s%s\n",name_msg, name);
		System.out.printf("%s%d살\n", age_msg, age);
		System.out.printf("%s%.2fkg\n", kg_msg, weight);
		System.out.printf("%s%c\n", condition_msg, condition);
		System.out.printf("%s%s\n", owner_msg, owner);
	}

}

형변환


1. 자동 형변환
     정수 + 정수 = 정수
     정수 + 실수 = 실수
     3 + 0.0 = 3.0
     문자 + 정수 = 정수
     'A' + 3 = 68
     정수 + 문자열 = 문자열

2. 강제형변환
     (자료형)값
     (double)3 == 3.0

 


* 문자열은 클래스 타입이기 때문에 형변환시 클래스 타입으로 형변환해야한다.
따라서 int -> Integer, double -> Double로 형변환 메소드에 접근하여 사용한다.
Integer.parseInt("10") : 10
Double.parseDouble("10.321") : 10.321

 


package day02;

public class CastingRest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		//자동 형변환
//		System.out.println(11/9);
//		System.out.println(11.0/9);
//		
//		System.out.println("=============");
//		
//		//강제 형변환
//		System.out.println((double)11/9);
//		System.out.println((int)8.53 + 4.59);
//		System.out.println((int)(8.53 + 4.59));
//		System.out.println((int)8.53 + (int)4.59);
//		
//		//문자 형변환
//		char data = 65;
//		System.out.println(data);
//		System.out.println('A' + 3);
//		
//		//문자열 형변환
//		String data1 = "10";
//		String data2 =  "20";
		
//		클래스를 형변환 하기 위해서는 클래스 안의 메소드에 값을 넣어야한다.
//		int num1 = Integer.parseInt(data1);
//		int num2 = Integer.parseInt(data2);
//		int result = num1 + num2;
//		
//		System.out.println(result);
		
//		int year = 2020;
//		String month = "" + 02; 
//		정수일 경우, 0은 무조건 탈락하기 때문에 문자열로 사용해야함
//		String month = "02";
//		System.out.println(year + month);

		int num1 = 10;
		int num2 = 3;
		
		System.out.println(""+ (num1 + num2) + 5);

		//Encryption 암호화
		//Decryption  복호화
		
		
	}

}

 


입력 메소드

(입력상태 : 커서가 깜빡이는 상태)

출력을 먼저하고 입력을 받는다.

 

     Scanner sc = new Scanner(System.in);
     next() : 문자열 입력

 


package day02;

import java.util.Scanner;

public class InputTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String name = "";
		//초기값
		//0, 0.0, '', ""
		
		System.out.print("이름 : ");
		name = sc.next(); // sc.next(); 입력을 받으면 자체가 값이 된다.
		
		System.out.println(name + "님 환영합니다.");
		
		
	}

}

 

* Scanner 클래스가 알려져있지 않기 때문에 

    Scanner (+ ctrl + spacebar)를 해서 알려줘야한다.

 

4G RAM의 내부구조

------------------- 단축키 ---------------------

ctrl + z : 뒤로돌리기
ctrl + y : 뒤로돌리기 취소
ctrl + d : 커서의 위의 한 줄 삭제

Home키 : 문장 앞
End키    : 문장 뒤 

-----------------------------------------------

 

eclipse 단축키 모음
https://goddaehee.tistory.com/134 

 


Q. C언어에서도 double이나 float를 출력할 때,  .2 를 붙이면 반올림인가?

 

A. 네