변수 (Variable)

woom·2022년 10월 24일
0

JAVA

목록 보기
2/18
post-thumbnail

🌼 1. 변수(Variable)

  • 리터럴(Literal) : 프로그램에서 사용하기 위해 표현되는 값(Value)
  • 변수(Variable) : 값을 저장하기 위해 메모리(주기억장치)에 부여된 이름
  • 변수 선언 형식 : 자료형(DataType) 변수명;
  • 자료형(DataType) : 변수에 저장될 값에 대한 형태
    • 원시형(PrimitiveType) 또는 참조형(ReferenceType)
  • 변수명 : 값을 저장하기 위한 메모리를 구분하기 위해 사용되는 식별자(Identifier)

📌 식별자 작성 규칙

  1. 영문자, 숫자, 특수문자(_또는 $)를 조합하여 작성
    (Java에서는 한글을 식별자로 사용 가능하나 권장하지 않음)
  2. 숫자로 시작되도록 작성 불가능
  3. 영문자는 대소문자를 구분하여 작성
  4. 기존에 사용된 단어 (키워드 또는 식별자)를 식별자로 사용 불가능

📌 Java에서 사용하는 식별자 작성 표기법 (약속)

  • 영문자의 소문자를 기본으로 식별자 작성
    1. 파스칼 표기법(PascalCase) : 조합된 단어의 첫문자를 대문자로 표현하여 식별자 작성
      -> 클래스명, 인터페이스명 작성 시 사용 ex) VariableApp, HelloWorld
    2. 카멜 표기법(CamelCase) : 첫번째 단어를 제외한 조합된 단어의 첫문자를 대문자로 표현하여 식별자 작성
      -> 변수명, 메소드명 작성 시 사용 , 기본 표기법 ex) helloWorld
    3. 스네이크 표기법(SnakeCase) : 조합된 단어를 _ 로 구분하여 식별자 작성
      -> 상수(Constant, 절대 변하지 않는 값) 작성 시 사용 (java에서 상수는 대문자로 작성)

🐣 예제

public class VariableApp {
	public static void main(String[] args) {
		int su; //정수값을 저장하기 위한 변수 선언 (int : 정수값을 표현하는 키워드)
		su=100; // = 대입연산자를 사용하여 변수에 값 저장(입력)
		System.out.print("초기값 = ");
		System.out.println(su); // 변수에 저장된 값을 화면에 출력
		
		// int su; // 같은 이름의 변수를 재선언할 경우 에러 발생
		su=200; // 변수에 기존값 대신 새로운 값 저장
		System.out.print("변경값 = ");
		System.out.println(su);
		
		int num=100; //변수 선언 및 초기값 저장
		System.out.println("num = "+num); //"문자열"+값 또는 값+"문자열" →문자열과 값의 결합
		System.out.println("올해는 "+2+0+2+2+"년입니다.");//올해는 2022년입니다.
		//숫자값+숫자값은 숫자값의 합계를 계산하는 의미 - 결과값 : 숫자값 (2+0+2+2=6으로 실행)
		System.out.println(2+0+2+2+"년은 호랑이띠해입니다."); //6년은 호랑이띠해입니다.
		// "" : 문자가 하나도 없는 문자열 - NullString
		System.out.println(""+2+0+2+2+"년은 호랑이띠해입니다.");

		//동일한 자료형의 변수는 , 기호를 사용하여 나열 선언 가능
		int num1=100, num2=200;
		System.out.println("연산결과 = "+num1+num2); // 실행 오류 발생 : 연산결과 = 100200
		//()연산자를 사용하여 무조건 먼저 실행되도록 설정 가능
		System.out.println("연산결과 = "+(num1+num2)); // 연산결과 = 300
		System.out.println("연산결과 = "+num1*num2);   // 연산결과 = 20000
		System.out.println("연산결과 = "+(num1*num2)); // 연산결과 = 20000

		int kor=88, eng=90;
		int tot=kor+eng; //연산 결과를 변수에 저장
		System.out.println("점수 합계 = "+tot);

		//변수에 값이 저장되어 있지 않는 상태에서 변수 사용시 에러 발생
		//int count;
		//System.out.println("count="+count);
		//변수에 저장 불가능한 값을 저장할 경우 에러 발생
		//int count=10.0;
		//System.out.println("count="+count);
        
        
        

🌼 2. 자료형(DataType)

  • 자료형(DataType) : 값이나 특정 대상을 표현하기 위한 키워드 또는 식별자
    • 값이나 특정 대상을 저장하기 위한 변수 생성을 위해 사용
      1. 원시형, 2. 참조형
  1. 원시형(PrimitiveType)/기본형 : 값을 표현하기 위한 자료형 - 키워드
    ex. 숫자형(정수형 4개, 실수형 2개, 문자형 1개)- 연산 가능 , 논리형 1개

  2. 참조형(ReferenceType) : 특정 대상을 표현하기 위한 자료형 - 식별자(클래스)
    ex. String 클래스 : 문자열을 표현하기 위한 자료형(클래스)


💡 참고

* 컴퓨터에서 값을 저장하기 위한 단위 : 1Bit(0또는1)>>1Byte(8Bit) : Character(영문자만해당)
* 1024Byte = 1KByte / 1024KByte = 1MByte / 1024Myte = 1GByte / 1024GByte = 1TByte
* 1Gbps(Bit per Second) : 초당 전송하는 bit수가 1G 
* 1Gcps (character per Second) : 초당 전송하는 문자수가 1G
* 50을 1byte(8bit)로 표현하면 00110010 >> 11001101:1의보수화(1's), 11001110:2의보수화(2's)
* -50을 1byte(8bit)로 표현하면11001110 (50 + -50 = 0이 되어야 하며 8bit 이상인 값은 제거됨)
    cf) 양수 음수를 구분하기 위해 앞에 0,1 양수가 0
* 값을 표현하는 저장 단위 : Bit - Byte - Word(ex. 서울시, 강남구) 
     - Field (ex. 서울시 강남구 태헤란로) : Column - Record : Row - Table - DB
* bit ~ record까지는 프로그래밍 언어로 저장 가능, SQL은 word~DB까지 저장 가능

🐣 예제1 (정수형)

public class DataTypeApp {
	public static void main(String[] args) {
		

		//정수형(IntegerType) 리터럴 : 소숫점이 없는 숫자값  
		//→Java의 정수형 리터럴은 기본적으로 4Byte(Interger)로 표현 :-2147483648~2147483647
		System.out.println("<<정수형(IntegerType)>>");
		System.out.println("정수값(10진수 100) = "+100);//숫자값 : 10진수 정수값을 표현
		//println() 메소드는 무조건 10진수의 정수값으로 변환하여 출력 처리
		System.out.println("정수값(8진수 100) = "+0100);//0숫자값 : 8진수 정수값을 표현
		System.out.println("정수값(16진수 100) = "+0x100);//0x숫자값 : 16진수 정수값 표현
		System.out.println("정수값(10진수 100)="+100L);//숫자값L : 8Byte(Long) 정수값 표현
		
		System.out.println("정수값 = "+2147483647);
		//4Byte로 표현 가능한 정수값 = -2147483648~2147483647
		// => 4Byte로 표현 불가능한 정수값을 사용할 경우 에러 발생
		//System.out.println("정수값 = "+2147483648);
		//4Byte로 표현 불가능한 정수값은 정수값 뒤에 [L]를 붙여 8Byte 정수값으로 표현하여 사용
		System.out.println("정수값 = "+2147483648L);
		
		//정수값을 표현하기 위한 자료형 
		// 1. byte (1Byte) : 기계를 제어하기 위해 사용 (데이터의 기본 단위)
		// 2. short (2Byte) : C언어에서 정수값으로 사용
		// 3. int (4Byte) : java에서 정수값으로 사용
		// 4. long (8Byte)

		byte a1=127;//1Byte : -128~127
		short a2=32767;//2Byte : -32768~32767 
		int a3=2147483647;//4Byte : -2147483648~2147483647
		long a4=2147483648L;//8Byte
		
		System.out.println("a1 = "+a1);
		System.out.println("a2 = "+a2);
		System.out.println("a3 = "+a3);
		System.out.println("a4 = "+a4);
		
		//int a5=100L;// 불가능 : 8byte용량을 4byte 공간에 저장할수 없음
		//값에 대한 변형이 발생될 수 있으므로 에러 발생
		long a5=100;//가능
		System.out.println("a5 = "+a5);
        
        
		

🐣 예제2 (실수형)

public class DataTypeApp {
	public static void main(String[] args) {
		//실수형(DoubleType) 리터럴 : 소숫점이 있는 숫자값
		// => Java의 실수형 리터럴은 기본적으로 8Byte(Double)로 표현
		System.out.println("<<실수형(DoubleType)>>");
		System.out.println("실수값(4Byte) ="+1.3F);//실수값F:4Byte(Float)의 실수값을 표현
		System.out.println("실수값(8Byte) ="+1.3);//실수값 : 8Byte(Double)의 실수값을 표현
		//println() 메소드는 아주 작은 실수값 또는 아주 커다란 실수값을 지수형태로 변환하여 출력
		System.out.println("실수값(8Byte) = "+0.000000000123); // 결과 : 1.23E-10 
		//실수값을 지수형태로 표현하여 사용 가능 (E10=10의10제곱, E-10=10의-10제곱)
		System.out.println("실수값(8Byte) = "+1.23E10);
		
		//실수값을 표현하기 위한 자료형 
		1. float(4Byte)의 실수값 : 메모리 절약하기 위해 적용, 2. double(8Byte)
		float b1=1.23456789F; //정밀도 : 7자리 (java는 소수점8자리에서 올림) 결과:1.2345679
		double b2=1.23456789; //정밀도 : 15자리
		
		System.out.println("b1 = "+b1);
		System.out.println("b2 = "+b2);
        
        
		

📌 회피 문자(Escape Character)/ 유니코드

  • 표현 불가능한 문자를 표현하기 위한 방법 - \ 기호 사용
  • '\n' : Enter , '\t' : Tab, \' : 문자 ', \" : 문자 ", \ : 문자 \, '\0' : NULL(존재X) 문자
  • 문자형 리터럴은 내부적으로 약속된 정수값(0~65535)으로 표현 : 유니코드(UniCode)
  • 아스키코드 : 1바이트를 이용해 만들어진 문자로 영문자와 특수문자만 가능
  • 유니코드: 2바이트를 이용해 만들어진 문자, java는 유니코드가 2Byte가 기본
    • 'A' : 65, 'a' : 97, '0' : 48, ' '(공백) : 32, '\n'(줄바꿈) : 13, '가' : 44032 - 완성형한글
    • 유니코드 영문자 대소문자 차이는 32 ex) 'A' : 65, 'a' : 97

🐣 예제3 (문자형)

public class DataTypeApp {
	public static void main(String[] args) {
		//문자형(CharacterType) 리터럴 : ' ' 안에 하나의 문자로 표현
		// - Java의 문자형 리터럴은 기본적으로 2Byte(char)로 표현
		//      -> 하나의 문자를 2바이트로 표현하는 이유는 전세계 언어를 표현하기 때문
		// - 일반 문자와 회피 문자로 구분하여 사용
		
		System.out.println("<<문자형(CharacterType)>>");
		System.out.println("문자형(2Byte)="+'A');
		System.out.println("문자형(2Byte)="+'가');
		System.out.println("문자형(2Byte)="+'\''); //결과 : '
		System.out.println("문자형(2Byte)="+'\\');//\하나는 회피문자로 인식하므로 \두번 사용
		
		//문자값을 표현하기 위한 자료형 - char(2Byte)
		char c1='A';//문자형 변수에는 문자값에 대한 약속된 정수값이 저장
		char c2=65;//문자형 변수에는 문자값에 대한 약속된 정수값을 직접 저장 가능
		char c3='a'-32;//문자값에 대한 연산 결과값 저장 가능
		
		System.out.println("c1 = "+c1); //결과 : A
		System.out.println("c2 = "+c2); //결과 : A
		System.out.println("c3 = "+c3); //결과 : A
		
		char c4=45000;
		System.out.println("c4 = "+c4); //결과 : 꿈
		cf) [Alt]+유니코드 입력 후 [Alt] 떼면 유니코드 입력됨
        
        

🐣 예제4 (논리형)

public class DataTypeApp {
	public static void main(String[] args) {
		//논리형(BooleanType) 리터럴 : false(거짓), true(참) -거짓, 참을 나타내는 키워드
		//→ Java의 논리형 리터럴은 기본적으로 1Byte(Boolean:불리언)로 표현 ex)판단유무에 사용
		System.out.println("<<논리형(BooleanType)>>");
		System.out.println("논리형(1Byte) = "+false);
		System.out.println("논리형(1Byte) = "+true);
		//관계 연산자(비교 연산자)를 이용한 연산식의 결과값으로 논리형 리터럴 제공
		System.out.println("논리형(1Byte) = "+(20<10)); // 결과 : false
		System.out.println("논리형(1Byte) = "+(20>10)); // 결과 : true
		
		//논리값을 표현하기 위한 자료형 - boolean(1Byte)
		boolean d1=false;
		boolean d2=20>10;
		System.out.println("d1 = "+d1);
		System.out.println("d2 = "+d2);
        
        
        
        

🐣 예제5 (문자열)

public class DataTypeApp {
	public static void main(String[] args) {
		

		//문자열 리터럴 : " " 안에 0개 이상의 문자들로 표현 , 문자 없는 것 : Null String
		// => 문자열은 원시형(기본형)이 아닌 참조형으로 String 클래스로 표현
		System.out.println("<<문자열(StringType)>>");
		System.out.println("문자열 = "+"홍길동");
		System.out.println("유관순 열사가 \"대한독립 만세\"를 외쳤습니다.");
		
		//문자열을 표현하기 위한 DataType : String 클래스
		String name="임꺽정";
		System.out.println("이름 = "+name);
   
   
   
   

🌼 3. 형변환 (TypeCast)

  • 값의 자료형을 일시적으로 변환하여 사용하는 방법
    1. 자동 형변환(JVM), 2. 강제 형변환(프로그래머) : 직접 프로그래밍

🐣 예제

public class TypeCastApp {
	public static void main(String[] args) {
		//자동 형변환 : 자료형이 다른 값을 연산하기 위해 JVM이 자료형을 일시적으로 변환
		//표현의 범위가 작은 자료형의 값이 커다란 자료형의 값으로 형변환되어 연산
		//byte < short < char < int < long < float < double (boolean은 연산 불가능)
		//int 자료형보다 작은 자료형은 무조건 int자료형으로 형변환되어 연산 처리
		System.out.println("결과 ="+(3+1.5)); //4.5
		
		double su=10;
		System.out.println("su = "+su);
		
		System.out.println("결과 = "+(95/10)); // 정수/정수:정수 -> 손실 발생
		System.out.println("결과 = "+(95.0/10.0)); // 실수/실수 : 실수
		System.out.println("결과 = "+(95.0/10)); // 실수/정수 : 실수(자동 형변환)
		System.out.println("결과 = "+(95/10.0)); // 정수/실수 : 실수 (자동 형변환)
		
		int kor=95, eng=90; //점수 입력
		int tot=kor+eng; // 총점 계산
		//double ave=tot/2; //평균 계산 - 연산 결과 : 정수/정수 후 변수값 형변환 ㅡ> 92.0 
		double ave=tot/2.; //평균 계산 - 연산 결과 : 정수/실수 후 변수값 형변환 ㅡ> 92.5 
		System.out.println("총점 = "+tot+ ", 평균 = "+ ave);


		byte su1=10, su2=20;
		//byte su3=su1+su2; → 실행오류
        //10(byte)+20(byte) >> 10(int)+20(int) >> 30(int) : byte 변수에 저장 불가능
		//int 자료형보다 작은 자료형은 무조건 int자료형으로 형변환되어 연산 처리 되므로 주의 필요
		int su3=su1+su2; 
		System.out.println("su3 ="+su3);
		
		//강제 형변환 : 프로그래머가 Cast 연산자를 사용하여 값을 일시적으로 원하는 자료형으로
		//변환하여 명령을 작성하는 방법, 형식 : (DataType)값
		int num=(int)12.3; //(int)12.3 : 12 ->정수값
		System.out.println("num="+num);
		
		int num1=95, num2=10;
		//double num3=num1/num2; // 연산결과 : 9.0 (정수/정수의 연산결과는 정수값)
		double num3=(double)num1/num2; // 연산결과 : 9.5 (실수/정수의 연산결과는 실수값)
		System.out.println("num3="+num3);
		
		//커다란 정수값은 _ 기호를 사용하여 표현 가능
		int num4=100_000_000, num5=30;
		//정수값의 연산 결과는 4Byte 범위의 정수값(-2147483648~2147483647)만 표현 가능
		//문제점 : 정수값에 대한 연산 결과가 4Byte 범위의 정수값 표현 범위을 벗어난 경우
		//쓰레기값 발생되어 변수에 저장됨 -> int num6=num4*num5; //실행 오류
		//해결법 : 정수값에 대한 연산 결과가 4Byte 범위의 정수값 표현 범위을 벗어난 경우
		// -> long 자료형으로 연산 처리
		long num6=(long)num4*num5;
		System.out.println("num6="+num6);
		
		double number=1.23456789;
		System.out.println("number="+number);
		
		//소숫점 2자리 위치까지만 출력되도록 명령 작성
		//절삭 : 내림, 올림에서 0은 올리지X
		System.out.println("number(내림)="+(int)(number*100)/100.);
		System.out.println("number(반올림)="+(int)(number*100+0.5)/100.);
		System.out.println("number(올림)="+(int)(number*100+0.9)/100.);
        
        
    
profile
Study Log 📂

0개의 댓글

관련 채용 정보