자바 배열 기초

배열(array)는 자바 프로그램에서 자주 사용하는 매우 중요한 개념이다. 배열의 사전적 의미는 '동일한 타입의 데이터가 일정한 순서로 모여 있는 것'을 의미하는데, 자바는 이런 배열을 참조 타입이라는 독특한 형태로 사용한다.

 

배열 객체 생성

new 데이터타입[배열크기];

배열 객체를 생성할 때 가장 먼저 등장하는 것이 new라는 예약어이다. JVM은 new라는 예약어를 만나는 순간 가장 먼저 객체 생서에 필요한 메모리 공간을 확보한다. 이때 중요한 정보가 바로 배열의 데이터타입과 크기이다. 만약 new int[5]; 라고 했다면 int타입(4byte)의 데이터 5개를 저장한다는 의미이므로 정수 5개를 저장할 수 있는 20byte만큼의 메모리 공간이 확보되는 것이다.

 

배열 객체는 생성되는 순간 각 저장 공간에 0부터 시작하는 인덱스 번호가 자동으로 부여되며, 각 인덱스에는 기본값이 자동으로 할당된다. 이를 배열의 기본 초기화라고 한다.

 

배열과 참조 변수

객체지향 언어를 이용하여 프로그램을 개발하면 수많은 객체들이 메모리에 생성되며, 각 객체는 고유한 메모리 주소를 갖는다. 그런데 프로그램에서 객체를 사용하기 위해 객체들의 메모리 위치를 외어서 사용하는 것은 불가능하다.

따라서 메모리 주소를 사람이 기억할 수 있는 참조 변수라는 것에 할당하고, 이 참조 변수를 통해 메모리상의 객체를 사용하는 것이다.

데이터타입[] 참조변수;

예) int[] scoreList;
double[] avgList;
String[] addressList;

 

배열 참조 변수 선언과 관련된 각 요소의 의미는 다음과 같다.

 

데이터 타입: 배열에 저장되는 데이터의 종류를 결정한다.

[] : 배열 첨자라고 읽으며, 현재 변수가 배열 변수임을 의미한다. 이 첨자의 개수에 따라 배열의 차원이 결정된다.

참조변수: 배열 객체의 주소가 할당될 참조 변수의 이름이다.

 

데이터타입[] 참조변수 = new 데이터타입[데이터크기];

int[] scoreList = new int[5];
public class Main {
    public static void main(String[] args) {
        int score = 83;
        int[] scoreList = new int[5];

        System.out.println("기본형 score : " + score);
        System.out.println("참조형 scoreList : " + scoreList);
    }
}

배열의 사용

배열의 참조 변수를 이용하면 배열 객체가 생성된 메모리의 특정 위치까지 접근할 수 있다.

이는 마치 주소를 통해 특정 건물을 찾아가는 과정과 동일하다. 즉, scoreList라는 참조 변수를 이용하면 메모리에 다른 객체가 있다 하더라도 정확하게 scoreList변수가 참조하는 배열객체를 찾아갈 수 있는 것이다.

 

public class Main {
    public static void main(String[] args) {
        int[] scoreList = new int[5];
        scoreList[0] = 76;
        scoreList[1] = 92;
        scoreList[2] = 49;

        System.out.println("scoreList[0] : " + scoreList[0]);
        System.out.println("scoreList[0] : " + scoreList[1]);
        System.out.println("scoreList[0] : " + scoreList[2]);
        System.out.println("scoreList[0] : " + scoreList[3]);
        System.out.println("scoreList[0] : " + scoreList[4]);

    }
}

for(데이터타입 참조변수 : 배열참조변수) {
	반복 수행문;
}
public class Main {
    public static void main(String[] args) {
        int[] scoreList = new int[5];
        scoreList[0] = 76;
        scoreList[1] = 92;
        scoreList[2] = 49;

        for(int score : scoreList) {
            System.out.println(score);
        }

    }
}

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 버블 정렬 알고리즘  (0) 2023.10.18
[JAVA] 참조 변수와 null  (0) 2023.10.18
[JAVA] 이름이 있는 break  (0) 2023.10.18
[JAVA] 데이터 타입 변환  (0) 2023.10.18
[JAVA] 연산자  (1) 2023.10.17

for문을 중첩하여 사용할 때 for문을 식별하기 위한 이름을 붙일 수 있다. 

중첩된 for문에 이름을 설정하면 break문을 사용하여 특정 for문을 종료시킬 수 있다.

public class BreakTest {
	public static void main(String[] args) {
    	
        outer: for (int i = 1; i <= 5; i++) {
        	for(int j = 1; j <= 5; j++) {
            	if(j>i) {
                	break outer;
                }
                System.out.print('#');
            }
            System.out.println();
        }
    }
}

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 참조 변수와 null  (0) 2023.10.18
[JAVA] 배열  (0) 2023.10.18
[JAVA] 데이터 타입 변환  (0) 2023.10.18
[JAVA] 연산자  (1) 2023.10.17
[JAVA] 데이터 타입  (1) 2023.10.17

자바는 두 가지 형태의 데이터 타입 변환을 지원한다.

1. 묵시적 타입 변환

2. 명시적 타입 변환

 

묵시적 타입 변환

묵지거 타입 변환(promotion)을 자동 변환이라고 하며, 말 그대로 별다른 조치 없이 자동으로 타입이 변환되는 것을 의미한다.

이런 묵시적 변환은 작은 크기의 데이터가 큰 크기의 타입으로 변환되는 경우에 한해 제공한다. 즉, 묵시적 타입 변환은 데이터의 크기와 관련되어 있다.

public class PromotionTest {
	public static void main(String[] args) {
    	int inAvg = 87;
        
        double doubleAvg = intAvg;
        System.out.println("double로 변환된 평균값 : " + doubleAvg); // 87.0
    }
}

 

실행 결과에서 확인할 수 있듯이 int 타입의 intAvg 값이 실수 타입인 doubleAvg 변수에 할당되는 순간 정수 87이 실수 87.0으로 변환되었다. 즉 데이터 타입이 int에서 double로 변환된 것이ㅏㄷ.

 

명시적 타입 변환

명시적 타입 변환(casting)은 묵시적 타입 변환의 반대이다. 즉 큰 크기의 데이터를 작은 타입의 데이터로 변환하는 것이다. 

데이터가 훼손돼도 프로그램을 처리하는 데 지장이 없다면 타입 변환을 통해 필요한 만큼의 데이터만 사용할 수도 있다.

 

public class CastingTest {
	public static void main(String[] args) {
    	double doubleAvg = 87.24;
        int intAvg = (int) doubleAvg;
        
        System.out.println(intAvg); // 87
    }
}

 

위 소스는 8byte의 값을 4byte의 변수에 할당한다. 이때 명시적 타입 변환을 통해 소수점 이하의 데이터를 잘라내고 있다. 따라서 intAvg 변수에 할당된 값은 double이 아닌 int로 변환된 87이다.

 

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 배열  (0) 2023.10.18
[JAVA] 이름이 있는 break  (0) 2023.10.18
[JAVA] 연산자  (1) 2023.10.17
[JAVA] 데이터 타입  (1) 2023.10.17
[JAVA] 자바 변수  (0) 2023.10.17

산술 연산자

사칙연산에 해당하는 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 연산자가 있으며, 나머지(%)연산자가 추가로 제공된다.

자바에서는 변수에 값을 할당할 때 연산자인 '=' 연산자를 사용하는데, 산술 연산에서는 코드의 양을 줄일 목적으로 복합 할당 연산자를 것을 사용하기도 한다.

score1 += score2; // score1 = score1 + score2;
score1 -= score2; // score1 = score1 - score2;
score1 *= score2; // score1 = score1 * score2;
score1 /= score2; // score1 = score1 / score2;
score1 %= score2; // score1 = score1 % score2;

 

증감 연산자

증감 연산자는 정수 타입의 변수 앞이나 뒤에 붙어서 변수의 값을 1 증가시키거나 1감소시킬 때 사용한다. 증감 연산자가 변수 앞에 있으면 전위 연산자, 뒤에 있으면 후위 연산자라고 한다. 둘다 변수 값을 1 증가 시키거나 감소시킨다는 점은 같지만 '언제' 증가/감소 시키는지 차이가 있다.

 

증가 연산자

public class OperatorTest {
	public static void main(String[] args) {
    	int score = 10;
        System.out.println('score값: ' + score); // 10
        ++score; 
        System.out.println('score값: ' + score); // 11
        score++;
        System.out.println('score값: ' + score); // 12
    }
}

 

public class OperatorTest {
	public static void main(String[] args) {
    	int score = 10;
        System.out.println('score값: ' + ++score); // 11
        System.out.println('score값: ' + score++); // 11
        System.out.println('score값: ' + score); // 12
    }
}

전위 연산자는 값을 먼저 증가 시킨 후 변수의 값을 사용하고, 후위연산자는 변수의 값을 사용하고 난 후 값을 증가 시킨다. 그렇기 때문에 위와 같은 결과를 확인할 수 있다.

 

감소 연산자

public class OperatorTest {
	public static void main(String[] args) {
    	int score = 10;
        System.out.println('score값: ' + --score); // 9
        System.out.println('score값: ' + score--); // 9
        System.out.println('score값: ' + score); // 8
    }
}

 

비교 연산자

비교 연산자는 특정 조건의 결과가 참(true)인지, 거짓(false)인지 판단할 때 사용한다. 비교 연산자의 종류와 의미는 다음과 같다.

연산자 사용 예 의미
> score > avg score가 avg보다 크다
>= score >= avg score가 avg보다 크거나 같다
< score < avg score가 avg보다 작다
<= score <= avg score가 avg보다 작거나 같다
== score == avg score가 avg와 같다
!= score != avg score가 avg와 다르다

 

논리 연산자

논리 연산자는 두 개 이상의 비교 연산 결과를 연결할 때 사용한다. 논리 연산자는 크게 AND 와 OR가 있다.

 

AND 연산자

AND(&) 연산은 연산자를 중김으로 양쪽의 조건이 모두 참일 때, 전체 결과를 참으로 처리한다.

char gender = 'M';
int score = 87;

System.out.println(gender == 'M' & score >= 80); // true

& 연산자 하나만 사용하면 양쪽코드를 모두 실행하지만 && 연산자를 사용하면 앞에 있는 코드가 false인 경우 뒤에 코드를 실행하지 않는다. 그렇기 떄문에 && 연산 속도가 더 빠르다.

&& 연산자를 사용하면 프로그램의 연산 처리 속도를 향상시킬 수 있다.

 

OR 연산자

OR( | ) 연산은 AND(&)연산과 달리 양쪽의 조건 중에 하나만 참(true) 이면 전체 연산 결과를 참으로 처리한다.

OR 연산도 AND 연산과 마찬가지로 '|' 연산자를 연속으로 두 개 사용하면 연산 처리 속도를 빠르게 할 수 있다.

 

조건 연산자

조건 연산자는 특정 조건이 참( true)인지, 거짓(false)인지에 따라 결과값이 달라지는 연산자로서, 삼항 연산자로고도 한다.

// 조건식 ? 값1 : 값2
조건식: 실행 결과가 true나 flase의 결과가 나오는 연산식
값1: 조건식 결과가 true일 때 처리되는 값
값2: 조건식 결과가 false일 때 처리되는 값

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 이름이 있는 break  (0) 2023.10.18
[JAVA] 데이터 타입 변환  (0) 2023.10.18
[JAVA] 데이터 타입  (1) 2023.10.17
[JAVA] 자바 변수  (0) 2023.10.17
[JAVA] 자바 클래스의 기본 구조  (0) 2023.10.17

+ Recent posts