본문 바로가기

Backend/Study Halle - Java

온라인 자바 스터디 2주차 - (1) 자바의 변수와 데이터 타입

리터럴 (Literal) 

 

  • 리터럴은 데이터 그 자체. 변수 및 상수에 넣는 변하지 않는 데이터를 의미한다. 
  • 변수나 상수는 메모리에 할당된 공간, 리터럴은 해당 할당된 공간에 저장되는 값이라고 할 수 있다.
// 1.문자
//- 홑따옴표 (작은따옴표) *큰 따옴표 사용 가능
System.out.println('A');
System.out.println('한');


// 2. 문자열
//- 쌍따옴표 (큰따옴표)  * 작은 따옴표 사용 불가
System.out.println("Hello");
System.out.println("안녕");


// 3. 숫자
//- 그냥 입력한다.
//- 0으로 시작하면 다른 숫자가 되니 주의한다.
System.out.println(100);
System.out.println(1.23456789);


// 4. 논리값
//- 소문자로 그냥 입력한다.
System.out.println(false);
System.out.println(true);


// 5. 이스케이프 문자
//  \n : 줄 바꿈
//  \t : 탭 (줄 맞춤)
//  \" : 더블쿼터 쌍따옴표
//  \' : 쿼터 홑따옴표
System.out.println("Hello\nJava");
System.out.println("Hello\tJava");
System.out.println("Hi\tJava");
System.out.println("\"Hello\" Java");
System.out.println("\'Hello\' Java");

 

변수 (Variables)

 

  • 데이터를 저장하는 메모리 공간(장소)이다.
  • 변수는 선언하고 사용한다.
    1) 변수의 선언은 어디서든 할 수 있다.
    2) 변수의 스코프 타임: 변수에 접근할 수 있는 영역. 변수가 선언된 코드블록({})에서만 유효하다. 
  • 변수명 규칙
    1) 숫자, 영문, 한글, 밑줄(_)을 섞어서 사용할 수 있다.
    2) 한글을 사용하지는 않는다.
    3) 첫 글자는 숫자일 수 없다. + 숫자로만 구성할 수 없다.
    4) camel case 규칙을 따른다. (ex: yourHome, myAge)
  • 오버플로우 : 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상
    예) int 형의 최대 값(2147483647)을 초과하는 숫자가 나타나게 되는 경우 오버플로우로 인해 데이터가 -2147483648(int형의 최소 값)이 된다.
    이 경우 시스템에러가 나진 않지마 값이 완전히 달라지기 때문에 출력된 값이 이상한 경우 오버플로우를 의심해보는 것이 좋다. (알고리즘 문제에서 자주 일어남)
  • 언더플로우 : 오버플로우의 반대 개념. 해당 타입이 표현할 수 있는 최소 범위보다 작은 수를 저장할 때 발생하는 현상
    예) int 형의 최소 값(-2147483648)보다 작은 숫자를 입력하는 경우 언더플로우로 인해 데이터가 2147483647(int형의 최대값)이 된다.
int myAge = 29; // 정수형 변수 myAge의 선언과 29라는 값을 초기화
int a; // 정수형 변수 a 선언. 

System.out.println(myAge); // 29가 출력
System.out.println(a); // 초기화가 이뤄지지 않은 상태라 오류가 남. 값을 넣어줘야 a사용 가능함

 

  • 변수의 스코프와 라이프타임

    1) Instance Variables: 클래스 내부와 모든 메소드 및 블록 외부에서 선언된 변수
       scope: static 메소드를 제외한 클래스 전체
       lifetime: 객체가 메모리에서 활용될 때까지

인스턴스 변수 a,b를 introduce 함수에서 사용할 수 있다.

      2) Class Variables: 클래스 내부와 클래스 외부의 블록({})에서 선언되고 static으로 표시된 변수
         scope: 클래스 모든 영역
         lifetime: 프로그램이 끝날 때까지 혹은 클래스가 메모리에 로드되는 동안

 

age, name 은 static으로 표시해줬기 때문에 사용해도 오류가 나지 않는다.

      3) Local Variables: 인스턴스 및 클래스 변수가 아닌 모든 변수
         scope: 선언 된 블록({}) 내부
         lifetime: 컨트롤이 선언 된 블록을 떠날 때까지

 

로컬변수 x,y는 메인함수에서 쓸 수 없는게 보인다.

   

 

상수 (Constant)

 

  • 메인함수(public static void man) 바깥에 final로 선언 한다.
  • 한번 선언이 된다면 절대로 바뀔 수 없다.
  • 상수형에 넣는 데이터는 숫자 뿐만 아니라 클래스나 구조체 같이 기본형에서 파생된 객체나 유도형 같은 데이터도 넣을 수 있다.
  • 상수명 규칙
    1) 모두 대문자를 사용한다.
    2) 단어 사이는 언더바로 연결한다.
  • 상수형도 데이터 선언시 초기화와 데이터 선언 먼저 해놓고 생성자에서 데이터를 초기화하는 것 모두 가능하다.
    객체마다 상수 값이 다를 때: 생성자에서 데이터 초기화
    객체마다 상수 값이 같을 때: 선언과 동시에 데이터 초기화
public class Ex1_variable {
	 
	final static double PI = 3.141592; //상수 더블형 PI 선언
	
	public static void main(String[] args) {

		int myAge = 29;
		int r;
		r=30;
		
		System.out.println(r);
		System.out.println(myAge);
		System.out.println("myAge");
		System.out.println(r*r*PI);
		
	}

}

 

데이터 타입

기본자료형 (primitive) 

  • 정수형
    1) byte: 1byte -> 파일 처리 용으로 byte[] 형태로 사용한다.
        범위: -128 ~ 127

        기본값: 0
    2) short: 2byte -> 자주 안씀.
        범위: -32,768 ~ 32,767
        기본값: 0
    3) int: 4byte -> 주로 사용한다. *주로 사용
        범위: -2,147,483,648 ~ 2,147,483,647
        기본값: 0
    4) long: 8byte -> int 로 부족할 때 사용한다.  *주로 사용
        범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
        기본값: 0L
  • 실수형
    1) float: 4byte -> 자주 안씀.
        범위: +-1.40129846432481707e-45 ~ 3.40282346638528860e+38

        기본값: 0.0f
    2) double: 8byte -> 주로 사용한다.
        범위: +-4.94065645841246544e-324d ~ 1.79769313486231570e+308d
        기본값: 0.0d
  • 문자형
    1) char: 2byte -> 전 세계 모든 문자의 표현이 가능하다.
        범위: 모든 유니코드 문자
        기본값: 0
  • 논리형
    boolean: true 또는 false 저장용이다.
    기본값: false

참조자료형 (Reference type)

  • 값이 아닌 값이 저장된 메모리 주소를 저장하는 자료형이다.
  • 메모리의 주소란?
    1) 메모리 고유의 번지수이다.
    2) 1바이트마다 고유의 번호가 16진수(0x로 시작하는 값)로 부여되어 있다.
  • 기본자료형이 아닌 모든 자료형은 참조자료형이다.
  • 참조자료형의 대표 String
    1) String a = "Hello";  // Hello 가 저장된 주소값(번지수)을 a 에 저장한다.
    2) String b = new String("Hello"); // Hello 가 저장된 주소값(번지수)를 b 에 저장한다. -> a Hello와 b Hello 는 다를 수 있다. (주소값, 번지수가 다르기 때문에)

 

기본자료형과 참조자료형의 차이

  • 객체를 생성할 때 new의 사용여부.
    참조자료형은 객체를 생성할 때 new가 필요함. 유일하게 new없이도 객체를 생성할 수 있는 참조 자료형 -> String! 
  • 기본자료형에서는 사칙연산을 포함 여러 연산이 가능하지만, 참조 자료형에서는 사칙 연산자는 '+'를 제외하고 사용할 수 없다.

 

 


참고

 

vitalholic.tistory.com/15

mommoo.tistory.com/14

www.tcpschool.com/java/java_datatype_basic

www.youtube.com/watch?v=cOHYKJD_-bc&list=PLRx0vPvlEmdBjfCADjCc41aD4G0bmdl4R&index=2

www.w3big.com/ko/java/java-basic-datatypes.html

castleone.tistory.com/5

league-cat.tistory.com/411