반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

2019/06/15 - [Software/Java] - [Java_Tutorial]8강-자바 코딩, 원시데이터 타입 [Primitive Data Types, 자바 프로그래밍 기초 , 자바 튜토리얼]

앞 포스팅에서 원시 데이터 타입(Primitive Data Types)에 대해 알아보았다. 코어 프로그램이 아닌 일반 코딩 시에는 int, long, double, String 형을 가장 자주 사용한다.

이번 포스팅은 배열(Arrays)에 대해 알아본다. 배열 또한 자주 쓰는 객체이다. 그럼 시작해 본다.

자바의 배열(Array)은 고정된 숫자로 길이를 고정해서 한 가지 타입의 값들을 담고 있는 컨테이너 객체이다. 무엇을 담을 수 있는 객체라는 것이다. 배열을 선언할 때 배열의 길이를 설정한다. 주의할 점은 배열 객체를 생성하고 나면 길이는 고정된다.

5개 엘리먼트 배열

5개 요소(element, 엘리먼트)로 구성된 (인덱스, index) 배열의 구조이다. 인덱스(index)0부터 시작하고 순차적으로 늘어난다. 0, 1, 2, 3, 4.. 네번째 값을 지정할 땐 index3을 사용한다. 즉 인덱스 3의 위치는 4번째 값을 가지고 있는 것이다. 배열 내 각각의 값들은 엘리먼트(element)라고 부른다. 그 엘리먼트들은 숫자로 된 인덱스와 매칭 된다. 그럼 실제 배열을 사용한 코딩을 해본다. Integerarray(배열)을 만들 것이다.

주의할 점은 new int[3]으로 생성한다고 인덱스(index)3까지 할당되는 게 아니다. [ ]의 숫자는 사이즈이므로 인덱스(index)0,1,2까지만 할당된다.

실전 프로그래밍에서는 이렇게 하나씩 넣을 수도 있지만 보통은 순환문(loop)을 사용할 것이다. 순환문은 (for, while, do-while)로 구성되어 있고 추후 사용법에 대해 포스팅하겠다.

 

 

배열을 선언하는 것은 2개의 컴포넌트가 필요한데 배열의 타입과 배열의 이름이 필요하다. 타입은 type[] 형태로 사용한다. 배열의 이름은 원하는 대로 만들면 된다. 다양한 타입의 배열을 선언해서 사용할 수 있고 대괄호 [ ]는 배열형 뒤나 배 열명 뒤에 사용할 수 있다.

long[] longArray; 또는 long longArray[];

배열의 값을 할당하는 방법은 위 예제 소스처럼 각 인덱스를 지정해서 할당할 수 있다.

int intArray[0] = 100;

또는 다음 방식으로 일괄 등록할 수도 있다.

int[] intArray = {1, 2, 3};

중괄호{ } 사이에 인덱스 순서대로 값을 넣으면 된다. 데이터베이스나 다른 데이터에서 값을 추출해서 배열에 할당해야 되는 경우는 첫 번째 방식으로 사용하면 되고 선언부터 고정된 상수값을 지정하려면 두 번째 방식이 유용하다.

또 하나 이중 배열도 이용할 수 있다. 사용 방식은 대괄호를 두 번 연속 사용하면 된다. 첫 번째 대괄호[ ]1차 순환 배열이고 두 번째 대괄호[ ]1차의 각 엘리먼트 별로 순환될 배열이다. 이중 배열도 실전에서 자주 사용한다. 두 개의 목록이 있을 경우 중복되는 값을 찾을 때 유용하다.

우선 예제를 살펴본다.

결괏값 room[0][1]은 첫 번째 대괄호인 [0]은 1층, 2층, 3층 배열을 지칭하는 것이고 두 번째 [1]은 1층,2층,3층 중 인덱스 12층이 된다. 출력은 “2 :”으로 나온다. 다음 room[1][1]을 보면 첫 번째 대괄호인 [1]은 두 번째 1, 2호 배열을 지칭하고 두 번째 [1]은 1호, 2호 중 인덱스 12호를 출력한다. 최종 결괏값은 “2 :2가 된다.

지금까지 배열의 개념, 생성과 사용에 대해 알아보았다. 그럼 배열에 대해 좀 더 다양한 기능들을 살펴본다.

배열을 복사해서 다른 배열을 만들 수 있다. 배열의 일부 값을 다른 배열에 복사해서 생성 및 사용할 수 있다. 배열을 복사할 수 있는 메서드는 System클래스의 arraycopy이다.

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

우선 srcdest 2개의 Object 파라메터(parameter)가 있는데 첫 번째 scr가 복사해 올 소스 배열이고 두 번째 dest 가 복사해 온 데이터로 새로 만들 배열을 나타낸다. Srcsource(원천)의 약자이고 destdestination(도착지)의 약자이다. 다음 int srcPost 파라메터는 src 배열에서 복사를 시작할 index위치를 의미하고 두 번째 int destPost는 새로 만들 배열에서 복사를 시작할 위치의 index를 의미하며 마지막 int length는 시작점에서 몇 개를 복사할 것인지 의미한다.

아래 예제를 통해 테스트를 해보자.

테스트 결과를 보면 index [0,1,5]는 값이 0이다. Int 배열은 기본값으로 0이 자동 설정됨을 알 수 있다. 지정한 대로 잘 복사되었다.

더 다양한 배열의 조작법에 대해 알아보자. 먼저 봤던 System.arraycopy 메서드는 순환문을 사용하지 않고 System.arraycopy를 이용해서 배열 전체 또는 부분을 복사해서 다른 배열에 값을 할당할 수 있다. 좀 더 편하게 배열을 다룰 수 있도록 Java SE 에서는 java.util.Arrays 클래스에 다양한 조작 기능을 제공한다. copyOfRange 메서드가 한 예인데 다음 예제를 통해 확인해 본다.

java.util.Arrays.copyOfRange(소스 배열, 소스 배열의 시작 index[포함], 소스 배열의 끝 index[미포함]);

해당 메서드는 System 클래스가 아닌 java.util.Arrays 클래스의 메서드로 소스 배열만 필요하고 목적 배열은 필요하지 않는다. 시작 index를 포함한 글자부터 끝 index는 포함하지 않은 바로 앞까지의 글자를 복사해 온다. 단 한 줄로 쉽게 배열을 복사해서 사용할 수 있다.

더 많은 기능은 검색 기능, 비교 기능, 채우기 기능, sort 기능, 나누기 기능 등 이 있다. 나중에 팁 포스팅에서 상세히 다루도록 하겠다.

2019/06/19 - [Software/Java] - [Java_Tutorial]10강-자바 코딩, 연산자[Operators, 자바 프로그래밍 기초 , 자바 튜토리얼]

 

[Java_Tutorial]10강-자바 코딩, 연산자[Operators, 자바 프로그래밍 기초 , 자바 튜토리얼]

[Oracle의 Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.] [Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼] 앞 포스팅에서..

tiboy.tistory.com

다음은 자바 프로그래밍(java programming)에서 오퍼레이터(조작)에 대해 알아본다.

반응형
반응형

[Java_Tutorial]8-자바 코딩, 원시데이터 타입 [Primitive Data Types, 자바 프로그래밍 기초 , 자바 튜토리얼]

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼, 자바 코딩]

2019/06/13 - [Software/Java] - [Java_Tutorial]7강-자바 언어 배우기, 패키지(Package)란? [객체지향 프로그래밍 개념, 자바 프로그래밍 기초 , 자바 튜토리얼]

 

[Java_Tutorial]7강-자바 언어 배우기, 패키지(Package)란? [객체지향 프로그래밍 개념, 자바 프로그래밍 기초 , 자바 튜토리얼]

[Oracle의 Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.] [Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼] 2019/06/10 - [..

tiboy.tistory.com

지금까지 객체지향 프로그래밍의 개념에 대해 알아보았다.이제는 본격적으로 자바(java) 코딩을 위한 프로그래밍 언어 또는 문법을 알아보자. 우선 이번 포스팅은 자바의 원시 데이터 타입(Primitive Data Types) 에 대해 알아본다.

자바에서는 fieldvariable 둘 다 사용한다. 자바 프로그래밍 언어에서 정의하는 다양한 변수들에 대해 우선 정리해 본다.

Instance Variables (Non-Static Fields) : 객체의 상태 값(클래스 필드) static 키워드가 없는 필드이다. 클래스의 각 인스턴스 별로 유일한 각각의 값을 가지고 있기에 당연 인스턴스 변수이다. 클래스의 객체를 인스턴스화 했을 때 인스턴스 변수는 인스턴스 별로 값을 공유하지 않고 독립적으로 가지고 있다는 의미이다.

Class Variables (Static Fields) : static 키워드를 붙여서 만든 클래스 필드로 같은 클래스에서 인스턴스화 했을 경우 여러 개의 객체가 만들어져도 값은 하나로 공유된다. Final 키워드를 붙이면 수정도 불가능하다.

Local Variables : 메서드 안에 생성되는 필드로 메서드의 {} 안에 정의한다. 특별히 붙이는 키워드는 없고 데이터 타입만 붙이면 된다. 메서드 내부에서 선언된 만큼 밖에서는 접속이 불가능하다. 지역변수라고도 한다.

Parameter : 메서드 선언할 때 입력 받는 변수를 파라미터라고 한다. 파라메터는 변수라고 하지 필드라고 하지 않는다.

원시 데이터 타입 (Primitive Data Types)

자바(Java) 프로그래밍 언어에서는 모든 변수들은 사용하기 전 반드시 먼저 선언을 해야 한다. 즉 미리 선언하지 않은 변수는 사용할 수 없다는 이야기다. 변수의 타입과 이름을 지정해야 한다.

int name = 1;

“name”이라는 변수가 있고 숫자형 데이터이며 초기화 값은 1이라는 의미이다. 자바 프로그래밍 언어는 총 7가지 원시 데이터 타입을 지원한다. 원시 데이터 타입은 미리 약속된 키워드로 지정해서 미리 정의되어 있다. 그럼 8가지 원시 데이터 타입(Primitive Data Types)에 대해 알아본다.

우선 2의 보수타입이라는 용어가 나오는데 그에 대한 설명을 먼저 해본다. 컴퓨터는 기본적으로 2진수를 사용한다. 01로 데이터를 저장하고 처리한다. 2의 보수 타입이란 2진수의 데이터 값의 음수 값을 표현할 때 컴퓨터에서 사용하는 타입이다. 예를 들어본다.

정수 22진수로 표현하면 0010이다. 여기서 -2로 바꾸기 위해 0010의 값을 01을 바꾸면 1101이 된다. 이것이 1의 보수이다. 하지만 우리는 2의 보수가 필요하다. 2의 보수는 1의 보수에 1을 더하면 된다. 11011을 더하면 1110이 된다. 그럼 컴퓨터 연산에서 필요한 -2를 표현하는1110이 된다.

우선 가장 작은 사이즈인 “byte”이다. Byte 타입은 8비트의 부호가 있는 2의 보수 타입이다. 최소 -128에서 최대 127까지의 값으로 사용할 수 있다. 메모리 절약에 유용하게 사용할 수 있다.

다음은 “short”16비트의 부호가 있는 2의 보수 타입이다. 최소 -32,768에서 최대 32,767 값으로 사용할 수 있다. short 도 byte처럼 메모리 절약에 효율적이다.

다음은 “int”로 기본적으로 사용하는 타입으로 32비트의 부호가 있는 2의 보수 타입이다. 최소 -2147483648에서 최대 2147483648이다. 사실 int 형을 가장 많이 사용한다. Java SE8 이후 버전부터는 int를 부호가 없는 타입으로 사용할 수 있게 되었다. 최소 0부터 최대 2^32-1만큼 사용 가능하다. 부호가 없는 int 데이터 타입을 사용하기 위해 Integer Class를 사용하면 된다.

다음은 “long”64비트의 부호가 있는 2의 보수 타입이다. 최소 -2^63에서 최대 2^63-1만큼 사용 가능하다. Long 타입도 int처럼 부호가 없는 타입으로 사용할 수 있다.

다음으로 “float”타입으로 단일-정밀 32비트 IEEE 754 floating 포인트로 이 범위는 이 논의의 범위를 벗어난다고 한다. 추후 포스팅할 Floating point types, Formats, and Values 에서 자세히 다룰 것이다. 이 또한 byte와 short 에서 권고한 것처럼 메모리 절약이 필요하면 이 타입을 사용하면 된다. 주의 사항은 통화() 같은 정확한 값이 필요한 경우에 사용해서는 안된다. 그건 java.math.BigDecimal을 사용해야 한다.

 

 

다음으로 “double”인데 이중-정밀 64비트 IEEE 754 floating 포인트로 이 또한 범위는 이 논의의 범위에서 벗어난다고 되어있다. 이 또한 float처럼 추후 포스팅할 Floating point types, Formats, and Values 에서 자세히 다룰 것이다. 이 타입은 기본적으로 실수형 타입에서 사용하며 통화() 같은 정밀한 값에서는 사용하지 않는다.

다음은 “Boolean”타입으로 오직 두 개의 값만 가진다. 바로 “true”“false”이다. 한 개의 bit 값 정보를 대신하며 size를 정의하지 않는다.

마지막으로 “char”로 단일 16비트 유니코드 값이다. 최소 \u0000(또는 0)에서 최대 \uffff (65,535)이다.

위의 8개 원시 데이터 타입(Primitive data type) 외에 지원하는 게 또 있다. 바로 java.lang.String 클래스이다. Double quotes(“)로 문자열을 둘러싸면 자동으로 Stirng 객체가 생성된다.

String a = “HelloWorld”;

한 번 생성되면 객체의 값은 바뀌지 않는다. 이 부분이 중요한데 a = “No” ; 로 바꾸면 되는거 아닌가 생각할 수 있다.

String a = “HelloWorld”;

a = “No”;

위의 s를 출력하면 “No”가 나온다. 그럼 값이 변경 되었다고 생각할 수 있지만 그렇지 않다. 추후 포스팅할 Simple Data Object 에서 더 자세히 설명할 것이다.

반응형