☕ Java

자바 변수, 상수, 자료형, 배열, 메서드

연_우리 2021. 11. 2. 15:10
반응형

[목차]

변수(Variable)

    변수의 선언, 할당

상수(Constant)

    상수의 선언, 할당

자료형(Data Type)

   기본자료형(Primitive Data Type)

   사용자 정의 자료형(User Defined Data Type)

배열

    배열의 장점

    배열의 단점

    배열 선언방법

    배열 생성방법

    가변길이배열

메서드

    메서드 선언 및 호출방법

    메서드의 매개변수 전달기법

        call by value

        call by reference


변수(Variable)

데이터를 저장할 메모리 공간(RAM)의 이름.

대입연산자(=)를 통해 값을 계속 변경할 수 있다.

 

변수의 선언, 할당

선언 : 메모리공간을 확보하는 것

int a;  // int형 자료가 들어갈 수 있는 a라는 공간을 만든다.

 

할당 : 변수에 값을 저장하는 것

a = 10;    // a에 10을 저장한다.
a = 20;    // a에 20을 저장한다. 기존의 값 10은 사라지게된다.

 



상수(Constant)

데이터를 저장할 메모리 공간(RAM)의 이름.

대입연산자(=)를 통해 값을 한번만 설정할 수 있다.

 

상수의 선언, 할당

선언 : 메모리공간을 확보하는 것

static final int a;  // int형 자료가 들어갈 수 있는 a라는 공간을 만든다.

static 키워드 : 이 키워드를 붙인 변수는 다른 클래스에서도 사용할 수 있게한다.

final 키워드 : 이 키워드를 붙인 변수는 값이 1번만 할당될 수 있도록 제한한다.

 

할당 : 변수에 값을 저장하는 것

a = 10;    // a에 10을 저장한다.
//a = 20;    // 오류발생!!

 

 


자료형(Data Type)

변수의 크기와 저장될 데이터의 종류이다.

 

이사가기 전 물건을 정리하는 상황을 상상해보자.

이사트럭에 물건을 실을 때 큰 박스에 작은 물건을 하나 넣고 포장하면 나머지 이사짐을 못 싣게된다.

그래서 우리는 당연히 공간활용을 위해 큰 박스에 큰 물건을 넣고 포장한다.

 

말을 변경해보겠다.

RAM이라는 이사트럭에 물건을 실을 때 큰 자료형에 작은 값을 넣으면 나머지 값을 저장할 수 없게된다.

자료형은 공간활용을 위한 다양한 크기의 상자라고 생각하면된다.

기본자료형(Primitive Data Type)

컴파일러에서 기본적으로 제공해주는 자료형이다. 

boolean / byte, short, int, long / float, double / char 형이 존재한다. 

저장될 수 있는 크기가 정해져있다.

 

사용자 정의 자료형(User Defined Data Type)

기본자료형으로 서점을 표현해보자

int 책가격, int 책재고, int직원수... void 책읽기(), void 책찾기()..

책에 관련된 것만 같이 묶어서 사용할 수 없을까? ⇒ 객체 탄생!

 

객체 자료형(Object Data Type) 이라고도 한다.

필요에 의해서 새롭게 만들어 사용하는 자료형이다.

클래스(설계도)를 통해 객체를 생성한다.

 

 


배열

같은 데이터타입의 데이터를 연속적으로 저장할 수 있는 메모리구조      ※ 배열도 객체이다!!

 

배열의 장점

많은 수의 변수를 만들기가 용이하다.

기억공간 접근이 쉽다(반복문 사용가능)

데이터 이동이 쉽다(참조변수만 이동하면된다)

 

배열의 단점

서로 다른 데이터타입을 저장할 수 없다. ⇒ 클래스로 보완 가능

 

배열 선언방법

int[] a;

 

int[] : int가 여러개인 구조

① 참조변수 a 공간 확보

 

배열 생성방법

a = new int[n];

② new int[n] : 배열객체(인스턴스) 메모리에 생성

③ a : 인스턴스의 주소를 a 변수(참조변수)에 할당한다

 

 

가변길이 배열 (2차원 이상 배열에서 주의!)

 


메서드(함수)

함수는 코드를 논리적 단위로 구분하고 분리해서 사용하는데에 목적이 있다.

이에 따라오는 것이 중복제거!

 

변수 ⇒ 저장만 한다.

데이터타입의 값 1개만 저장 가능하다

 

메서드 ⇒ 동작 후 저장한다.

메서드 이름이 변수 역할을 한다.

동작 후 데이터타입의 값 1개만 만들어낸다

 

메서드 선언 및 호출방법

int v = sum(10, 30);   //메서드 호출

public int sum(int a, int b){   
//접근제어자 리턴타입 메서드이름(매개변수)
	return a+b;  //결과값 반환
}

 

 

메서드의 매개변수 전달기법

Call By Value

값이 복사되어 전달된다.

기억공간이 개별이다.

public static void main(String[] args) {
    int a = 10;
    int b = 5;
    System.out.println("func실행 전 : "+a+", "+b);
    func(a, b);
    System.out.println("func실행 후 : "+a+", "+b);
}

static void func(int a, int b){
    int temp = a;
    a = b;
    b = temp;
    System.out.println("func실행 중 : "+a+", "+b);
}

/*
func실행 전 : 10, 5
func실행 중 : 5, 10
func실행 후 : 10, 5
*/

실행 후에는 5, 10이 출력되야하는 것 아닌가??

a와 b는 기본형변수로 func로 변수의 값만 복사해서 처리했기때문에

func실행 후에는 10, 5가 출력된다!!

 

 

Call By Reference

주소가 복사되어 전달된다.

기억공간을 공유한다.

class Dummy {
    int a = 10;
    int b = 5;
}


public static void main(String[] args) {
    Dummy dummy = new Dummy();
    System.out.println("func실행 전 : "+dummy.a+", "+dummy.b);
    func(dummy);
    System.out.println("func실행 후 : "+dummy.a+", "+dummy.b);
}

static void func(Dummy dummy){
    int temp = dummy.a;
    dummy.a = dummy.b;
    dummy.b = temp;
    System.out.println("func실행 중 : "+dummy.a+", "+dummy.b);
}

/*
func실행 전 : 10, 5
func실행 중 : 5, 10
func실행 후 : 5, 10
*/

실행 후에 5, 10이 출력되었다!!

dummy는 참조형변수로 func로 변수의 값이 아닌 주소가 넘어가기때문에 

func에서 dummy 자체를 수정하게되는 것이다!!

 

반응형
  • 네이버 블러그 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 구글 플러스 공유하기
  • 카카오톡 공유하기