[이클립스] 변수의 종류와 특징(형변환)

전 내용 정리

더보기

1. 자바 3가지 환경
  - Java SE: 기본개발 환경, JDK 설치(2개의 환경변수: JAVA_HOME, PATH )
  - Java EE: 웹 개발 환경 ( 서블릿/jsp ), Tomcat설치
  - Java ME: 모바일 환경

2. 자바 특징
  - 플랫폼(OS)에 독립적==> 생성된 class 파일을 어떤 OS에서도 그냥 실행이 가능하다.
  - 객체지향 프로그래밍(Object Oriented Programming: OOP )

3. 자바 프로그램 개발 순서

   1) 소스작성 ( Hello.java )
      - 개발자가 이해할 수 있는 영단어 코드로 구성
   
   2) 컴파일 단계 ( javac.exe 컴파일러 이용 )
       Hello.java ----------> Hello.class ( bytecode )
      
      문법: javac  Hello.java

   3) 실행 단계 ( java.exe 인터프리터 이용 )
      Hello.class ----------------> 결과값 출력

      문법: java  Hello

4. JVM ( Java Virtual Machine)
  - 역할: bytecode인 class 실행시킴
  - JDK설치하면 JVM이 구축됨
  - S/W이지만 H/W 특징을 가짐 ( 다양한 메모리 포함 )
    주요 메모리: stack, heap, method area

5. 자바에서 사용 가능한 데이터 종류 ( ***************** )

   가. 기본형 데이터 ( 데이터종류, data type )
      - Primitive Data Type: PDT
      - 종류:
      수치형  - 정수형 : byte  (1byte)
                                   short (2byte)
                                   int   (4byte): 기본
                                   long  (8byte)
      
      정수값(리터럴)표현: 10진수, 2진수(0|1), 8진수(0~7), 
                      16진수(0~9,A,B,C,D,E,F) 모두 사용 가능
                                         예>   10    0b값   0값   0x값
      만약에 100 정수를 쓰면 기본인 int로 처리가  된다. 
      long으로 처리하고 싶으면 100L 지정한다.
 
                 -실수형 : float (4byte) 
                                double (8byte): 기본
                               실수값(리터럴)표현: 소수점이용, 지수표현 가능
           예>  31.4, 31.4D   ===> double 처리
       31.4F  ==> float 처리


       문자형          : char(2byte)
                               -문자형(리터럴)표현: 반드시 '' 사용
                                 예> 'A', '남'
                               - escape 문자 ( \t, \n, \\, \', \" )
       - 전세계의 모든 문자 표현 가능

       논리형          : boolean (1byte)
       논리형(리터럴)표현:   true, false


나. 참조형 데이터 


      - Reference Data Type: RDT
      - 기본형 8개 제외한 나머지 모두
       대표적: 클래스, 인터페이스, 배열

1. 정수에서 long 타입으로 사용할 때는 다음과 같이 정수값L 지정한다.
  예> 300L

2. 기본형 8개에 해당되는 클래스 8개를 제공한다.

 기본형          참조형(클래스) ==> wrapper 클래스라고 부른다.
 ----------------------------
 byte              Byte
 short             Short
 int                 Integer
 long              Long

 float             Float
 double         Double

 char             Character
 boolean       Boolean


3. 변수 ( variable )


  1) 용도
    - 데이터 저장 ( 기본형 데이터 및 참조형 데이터 저장용도 )
    - 언제든지 값이 변경될 수 있음.

  2)사용방법 3단계
    (1) 변수선언
        - 데이터가 저장된 영역 확보 작업 ( 메모리에 저장되고 메모리 위치에 해당되는 이름 지정)
- 문법:

    데이터타입 변수명;
         예>  int num;      // int 때문에 4byte 영역확보
                String name;  // String 참조형이기 때문에 4byte 영역확보

    (2) 변수초기화
        - 생성된 변수에 처음 값을 저장하는 작업
        - 문법:
     변수명=값;

         예>  num = 19;
                 name = "홍길동";

    (3) 변수 사용
       System.out.println(num);  // 19
       System.out.println(name); // 홍길동


     (4) 변수값 변경
        num=29;
        System.out.println(num);  // 29


4. 기본형 변수 vs 참조형 변수


  1) 기본형 변수
    - 기본형 데이터를 저장하는 변수
    예> 
        int num;   // 실제값이 저장
            num = 20;
    
    ==> num 변수안에 20이 저장됨.

  2) 참조형 변수
    - 참조형 데이터를 저장하는 변수
   
   예>
       String name;  // 주소값이 저장
                 name ="홍길동";

   ==> name 변수 안에 "홍길동"이 저장된 주소값이 저장됨.


5. 변수 종류 ( **************************)


  - 변수 선언 위치와 용도에 따른 분류


  가. 로컬 변수 ( local variable )


      - 메서드안에서 선언
      - 생성시점: 메서드 호출시 변수생성됨 
        제거시점: 메서드 호출후 작업이 모두 끝났을 때
      - 생성횟수: 메서드 호출할때마다 매번 생성되고 
                        메서드 작업이 끝나면 매번 삭제됨. ( 일시적으로 사용할 목적으로 주로 사용됨 )
      - 저장메모리: stack 메모리
      - 선언만하고 초기화하지 않으면 자동초기화 안됨.
        반드시 사용전에 초기화해야 된다. (******************)


  나. 인스턴스 변수 ( instance variable )


      - 메서드 밖에서 선언
      - 생성시점: 클래스 객체 생성(new 키워드 이용)시 변수생성됨 
        제거시점: 클래스 객체가 제거될 때 변수가 삭제됨.
        ==> 개발자가 클래스를 사용하기 위해서 new 이용한다. ( 클래스 영역 확보 )
      사용된 클래스 영역을 제거는 개발자가 하지 않고 자바가 자동으로 제거해준다.
      제거해주는 프로세스는 GC ( Garbage Collector)가 해준다.
      ==> C 언어는 영역 확보 및 제거를 개발자가 모두 직접 해야된다.
      - 생성횟수: new 할때마다 매번 생성.
      - 저장메모리: heap 메모리
      - 선언만하고 초기화하지 않으면 자동으로 기본값으로 초기화된다.
        기본형:
    정수: 0
    실수: 0.0
    문자: \u0000
    논리: false
    참조형: null

 


  다. 클래스 변수 ( class variable, static variable)


      - 메서드 밖에서 선언 + static 키워드 추가
      - 생성시점: 프로그램 실행시 변수 생성됨 
        제거시점: 프로그램 종료시 변수가 삭제됨.
      - 생성횟수: 1 번
      - 저장메모리: method area 메모리  
      - 선언만하고 초기화하지 않으면 자동으로 기본값으로 초기화된다.
        기본형:
                   정수: 0
                   실수: 0.0
                   문자: \u0000
                   논리: false
                   참조형: null

 

예시

더보기

public class VariableExample {
    
    // 클래스 변수 (static 변수)
    // 프로그램 시작 시 생성되며, 프로그램 종료 시 제거됨.
    // 모든 객체에서 공유하는 변수로 메모리의 method area에 저장됨.
    static int classVar = 10;

    // 인스턴스 변수
    // 객체가 생성될 때 생성되며, 객체가 제거될 때 함께 삭제됨.
    // heap 메모리에 저장되며, 각 객체마다 따로 생성됨.
    int instanceVar = 20;
    
    public static void main(String[] args) {
        // 로컬 변수
        // 메서드가 호출될 때 생성되고, 메서드가 끝나면 삭제됨.
        // stack 메모리에 저장되며, 반드시 초기화되어야 함.
        int localVar = 30;
        
        // 로컬 변수 출력
        System.out.println("로컬 변수(localVar): " + localVar);
        
        // 클래스 변수 출력 (클래스 이름을 통해 접근)
        System.out.println("클래스 변수(classVar): " + VariableExample.classVar);
        
        // 인스턴스 변수는 객체 생성 후 접근 가능
        VariableExample example = new VariableExample();
        System.out.println("인스턴스 변수(instanceVar): " + example.instanceVar);
    }
}

 


  
6. 변수 특징



  1) 변수명이 동일하면 안됨


  2) 로컬변수는 사용전에 반드시 초기화
     초기화 안하면 컴파일 에러가 발생됨.

  3) 변수를 인식하는 범위 ( scope )
    ==> 블럭(중괄호{})


7. 상수 ( Constant )


  - 상수는 값 변경 불가
  - final 키워드 이용함.
  - 변수와 구별하기 위해서 대문자로 지정 ( 관례 )
  예> final int NUM=100;


8. 데이터형 변환


  1) 개념
    - 한번 선언된 데이터형은 언제든지 변경이 가능하다.
    - 큰박스에 작은 박스는 저장이 가능하고
      역은 저장불가

  2) 형변환 종류

     (1) 자동 형변환( 묵시적, promotion, up-casting )

         가.  byte(1byte) > short(2byte) > int > long > float > double 

 

         나.  char(문자형) > int(정수형 )
             예>  int n = 'A';  //가능


        다. 정수형중에서 int보다 작은 타입의 연산결과는  기본값인 int로 반환된다.

 

        라. 작은 데이터형과 큰 데이터의 연산결과는 큰 데이터형으로 반환된다.

        예> 정수형하고 실수형하고 연산결과는 실수형으로 반환된다.

        마. 문자열+비문자열(문자열)=====> 문자열로 반환


     (2) 강제형변환 ( 명시적, type casting, down-casting, 일반적으로 의미하는 형변환 )

         - 작은타입 = 큰타입; //에러

         - 작은타입 = (작은타입)큰타입;  // 형변환 연산자: (타입)

  3) 현재는 기본형만 형변환 실습을 했음.
     하지만 참조형(클래스)도 형변환이 가능하다. (*************************)
     결론은 자바의 모든 데이터(기본형,참조형)는 형변환이 가능하다.



9. 콘솔(console)에 값을 출력하는 방법


  
   - 출력 대상은 다양하다.
     모니터에 출력하는 경우를 표준출력(standard output) 이라고 한다.
     반대 개념인 표준입력(standard input)은 키보에서 입력받는것을 의미한다.

  1) System.out.println(값); 
    - 새로운 줄(new line)에 출력한다.
    - 반드시 하나의 값만 지정한다.

  2) System.out.print(값);
    - 새로운 줄 없이 현재줄에 출력한다.
    - 반드시 하나의 값만 지정한다.

  3) System.out.printf("  ", ...);  // ... 는 가변인자라고 하고 갯수는 정해져 있지 않음

   예> System.out.printf( "  ", 값); 
          System.out.printf( "  ", 값1, 값2);
          System.out.printf( "  ", 값1,값2,값3,값4,값5);

     String name ="홍길동";
     int age = 20;
     System.out.printf( "이름:%s, 나이:%d", name, age);


참고할만한 사이트 소개


# Java 타입 형변환 원리 & 방법
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%ED%83%80%EC%9E%85-%ED%98%95%EB%B3%80%ED%99%98-%EC%A2%85%EB%A5%98-%EB%B0%A9%EB%B2%95-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC

# final 키워드
https://www.devkuma.com/docs/java/final/
https://sudo-minz.tistory.com/135

# printf(), 이스케이프 문자, 형식 지정자
https://damy.tistory.com/3

# 그림으로 보는 자바 코드의 메모리 영역 (스택 & 힙)
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD%EC%8A%A4%ED%83%9D-%ED%9E%99