티스토리 뷰

development/Java

[Java] 자바의 DataType

Happyoon ~ 2021. 10. 31. 04:34
728x90
반응형

자바는 객체지향 언어이다. 

자바의 기본 자료형에는 숫자와 관련된 6가지와 문자, boolean 타입으로 8가지가 있다. 

 

[ Java 기본 데이터 type ]

1. 숫자형

  1) 정수형 : byte, short, int, long

  • byte 변수명;  // -128 ~ 127
  • short 변수명;  // -32768 ~ 32767
  • int  변수명; // -2,147,483,648 ~ 2,147,483,647
  • long 변수명; // -9223372036854775808 ~ 9,223,372,036,854,775,807
      

 

  2) 실수형 : float, double

  • float 변수명; // 1.40129846432481707e-45 ~ 3.40282346638528860e+38
  • double 변수명; //4.94065645841246544e-324d ~ 1.79769313486231570e+308d 

 

2. 논리형(boolean)

  • true, false 두 가지 값 중 하나이다.
  • true, false 를 직접 쓰거나 비교연산 혹은 논리연산의 결과로 얻어낼 수 있다.
  • 참과 거짓을 나타내는 data type

 

3. 문자형 (char)

  • 65536 가지의 코드값을 가질수 있다.
  • 전 세계에서 사용하는 모든 문자 1글자를 표현할수 있다.
  • single quotation 을 이용해서 만든다.

 

 

[Java의 참조 데이터 type]

 

자바의 참조데이터 타입은 무한개가 존재한다. 사용자가 데이터 타입을 정의할 수 있기 때문이다. 

우리가 익히 알고 있는 String 역시 참조 데이터 타입의 일종이다. 

 

1. String type

  • 문자열을 다룰 때 사용하는 데이터 type

 

 


이제 예제를 살펴 보자.

 

예제 1 - casting 연산자

public class MainClass01 {
	public static void main(String[] args) {
		System.out.println("main 메소드가 시작 되었습니다.");
		byte iByte = 10;
		short iShort = 10;
		int iInt = 10;
		long iLong = 10;
		
		int tmp = iByte;
		//표현 가능한 범위가 더 넓은 변수에 담긴 값을 상대적으로 좁은 범위의 변수에 담는 것은 문법적으로 에러이다.
		//byte tmp2 = iInt;
		
		//강제로 담고 싶을 때는 casting 연산자를 이용한다.
		byte tmp2 = (byte)iInt; //(byte)는 byte type으로 변환하는 casting 연산자이다.
		System.out.println(tmp2);
		
		//실수형 변수 선언하고 값 대입하기
		float num1 = 10.1f;
		double num2 = 10.2d;
		double num3 = 10.3;//d,f를 붙이지 않으면 double type으로 인식된다. 
		
		double tmp3 = num1;
		float tmp4 = (float)num2;
		
		
		System.out.println("main 메소드가 종료 됩니다.");
	}
}

표현 가능 범위가 더 넓은 변수에 담긴 값을 좁은 범위의 변수에 담는 것은 문법적으로 에러이다.

따라서, 강제로 담고 싶을 때는 casting 연산자를 이용한다. 

casting 연산자는 변환 대상 앞에 소괄호 안에 원하는 데이터 타입을 넣어주면 된다.

예시. (byte) iInt;

 

다른 언어와 달라 조금 생소했던 것은, float 타입은 숫자 뒤에 'f'를 붙여줘야 한다는 사실이었다. 

 

 


 

예제 2 - 정수끼리의 연산으로 실수 표현하기

package test.main;

public class MainClass02 {
	public static void main(String[] args) {
		//국어 점수
		int kor = 95;
		//영어 점수
		int eng = 100;
		
		
		//1. 국어 점수와 영어 점수의 평균을 구해서 변수에 담아 보세요.
		double ave = (kor+eng)/2.0;
		double ave2 = (double)(kor+eng)/2;
		/*
		 * 	정수와 정수를 연산하면 결과는 정수만 나온다.
		 * 정확한 실수값이 필요하면 연산하는 숫자 중에 어느 하나라도 실수가 있어야 한다.
		 */
		//2. 그리고 결과를 콘솔창에 이쁘게 출력해 보세요.
		System.out.println(ave);
	}

}

이 예제는 정수인 국어점수와 영어점수로 실수인 평균값을 표현하는 문제였다. 

이 예제에서 중요한 점은, 정수끼리 연산하면 결과는 정수만 나온다는 점이었다.

따라서, 정확한 실수값이 필요하면 연산하는 숫자 중에 어느 하나라도 실수가 있어야하므로

kor+eng 에 double을 캐스팅 해주거나, 2.0으로 나눠주는 등, 다양한 방식으로 원하는 값을 도출할 수 있다. 

 

 


예제 3 - boolean 연습하기 

package test.main;
/*
 * 	2. 논리형(boolean)
 *  - true, false 두 가지 값 중 하나이다.
 *  - true, false 를 직접 쓰거나 비교연산 혹은 논리연산의 결과로 얻어낼 수 있다.
 *  - 참과 거짓을 나타내는 data type
 */
public class MainClass03 {
	public static void main(String[] args) {
		//논리형 변수 선언과 동시에 값 대입하기 
		boolean isRun = true;
		if(isRun) {
			System.out.println("달려요");
		}
		//비교 연산의 결과로 얻어진 boolean 값 담기
		boolean isGreater = 10>1;
		//논리 연산의 결과로 얻어진 boolean 값 담기
		boolean result = true||false;
	}

}

boolean은 다른 언어와 유사하므로 코드와 주석 내용만 한번 읽어보면 될 것 같다.

 

 


예제 4 - char 형 연습하기

package test.main;
/*
 *  [ Java 기본 데이터 type ]
 *  
 *  3. 문자형 (char)
 *  
 *  - 65536 가지의 코드값을 가질수 있다
 *  - 전 세계에서 사용하는 모든 문자 1글자를 표현할수 있다.
 *  - single quotation 을 이용해서 만든다.  
 */
public class MainClass04 {
   public static void main(String[] args) {
      System.out.println("main 메소드가 시작 되었습니다.");
      //char 형 변수 선언과 동시에 값 대입하기 
      char ch1='a';
      char ch2='b';
      char ch3='c';
      char ch4='가';
      char ch5='나';
      char ch6='다';
      char ch7='@';
      
      //정수값에 1:1 대응되는 char 값이 존재한다. 
      int code1=ch1;
      int code2=ch2;
      int code3=ch3;
      int code4=ch4;
      int code5=ch5;
      int code6=ch6;
      
      char result1=100;
      char result2=101;
      char result3=102;
   }
}

char형은 single quotation을 이용한다. 이 부분도 다른 언어와 유사하므로 한번만 읽어보면 될 것 같다.

 

 


예제 5 - String 연습하기

package test.main;
/*
 * 	[ Java 참조 데이터 type ]
 * 
 * 	String type
 * 
 * 	- 문자열을 다룰 때 사용하는 데이터 type
 */

public class MainClass05 {
	public static void main(String[] args) {
		//"김구라"의 참조값을 name이라는 변수에 담기
		String name = "김구라";
		//name에 들어있는 참조값을 tmp라는 변수에 복사해주기
		String tmp = name;
		//name에 "원숭이"의 참조값을 넣어주기(기존의 참조값에 엎어 쓰기가 된다)
		name = "원숭이";
		//name을 비우기
		name = null;//null은 참조값이 담길 수 있는 빈 공간 
	
	}

}

String 은 참조 데이터 타입의 일종이고, "null은 참조데이터값이 담길 수 있는 빈 공간"이므로 null을 String 형 변수에 대입할 수 있다. 

 


예제 6 - 지역변수 알아보기1

package test.main;

public class MainClass06 {
	public static void main(String[] args) {
		System.out.println("메소드가 시작 되었습니다.");
		//지역번수를 값을 넣지 않고 선언만 한다면?
		
		//지역변수는 선언만 하면 만들어지지 않는다.
		int num1;
		
		//int result = 10 + num1;
		
		//지역변수는 선언만 하면 만들어지지 않는다.
		String name1;
		//System.out.println("name1:"+name1);
		System.out.println("메소드가 종료됩니다.");
	}

}

지역변수는 값을 넣지 않고 선언만 한다면 만들어지지 않는다. 

 


예제 7 - 지역변수 알아보기2

package test.main;

public class MainClass07 {
	public static void main(String[] args) {
		System.out.println("main 메소드가 시작되었습니다.");
		//지역번수를 만들고 값을 나중에 넣고 싶으면 초기 값을 넣어주는 게 일반적이다.
		int num1 = 0;
		
		String name1 = null;
		System.out.println("main 메소드가 종료됩니다.");
	}

}

지역변수를 만들고 값을 나중에 넣고 싶으면 초기값을 설정하는 것이 일반적이다. 

 


예제 8 - 메소드

package test.main;

public class MainClass08 {
	public static void main(String[] args) {
		int num1 = 10;
		String str = "abcde12345";
	/*
	 * 		javascript에서는 함수를 호출한 그 위치는 반드시 어떤 값으로 바뀌지만
	 * 		java에서는 메소드를 호출한 그 위치는 어떤 값으로 바뀔 수도 있고 안 바뀔 수도 있다.
	 */
		int a = str.length();
		char b = str.charAt(0);
		String c = str.toUpperCase();
		
		System.out.println("문자열의 길이: "+a);
		System.out.println("index 0: "+b);
		System.out.println(c);
		System.out.println(str[5]);
	}
}

javascript와 달리, java에서는 메소드를 호출한 위치가 어떤 값으로 바뀔 수도, 바뀌지 않을 수도 있다.

즉, 반환값이 없을 수 있다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함