배열(array)이란 인덱스(index)와 이에 대응하는 데이터들로 이루어진 자료구조이다. 배열에는 같은 종류의 데이터들이 순차적으로 저장된다.[1] 영어 그대로 어레이(array)라고도 한다.
개요
배열(Array)은 같은 자료형을 가진 연속된 메모리 공간으로 이루어진 자료구조이다. 가장 기본적이 자료구조로, 구조가 간단하여 데이터를 읽어오는데 걸리는 시간이 가장 빨라서 많은 양의 데이터를 처리할 때 유용하다. 배열을 구성하는 값들을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자를 인덱스(Index)라고 한다. Java에서 인덱스는 0부터 시작하고, 0을 포함한 양의 정수만을 가질 수 있다. 배열은 많은 데이터들 중 연관이 있는 데이터들끼리 묶어서 관리할 수 있기 때문에 편리하다. 선언되는 형식에 따라서 1차원, 2차원, 다차원 배열로 선언이 가능하다. 하지만 현실적으로 이해가 가능한 2차원 배열까지를 많이 사용한다. [3]
특징
문법
배열은 선언과 생성을 따로 작성하는 방법과 선언과 생성을 동시에 작성하는 방법이 있다. 선언과 생성을 따로 작성할 경우에는 선언을 먼저한 후 new 키워드를 이용하여 실제 배열로 생성한다. 선언과 생성을 동시에 작성할 경우에는 '='를 기준으로 왼쪽엔 선언을, 오른쪽엔 배열을 생성한다. 선언을 하는 방법이 두가지가 있는데 두가지 방법 모두 배열을 만들기 위해 사용할 수 있지만, 첫번째 방법을 권장한다. [3]
선언 방법
1. 타입[] 배열이름;
2. 타입 배열이름[];
1. 타입[] 배열이름;
배열이름 = new 타입[배열길이];
2. 타입 배열이름[];
배열이름 = new 타입[배열길이];
타입[] 배열이름 = new 타입[배열길이];
초기화 방법
배열은 생성과 동시에 자동초기화 되는데 초기화 값은 아래의 표 '배열의 타입'을 참고하면 된다.
1) 배열 생성과 동시에 초기화
// 방법1
타입[] 배열이름 = {값1, 값2, …};
// 방법2
타입[] 배열이름 = new 타입[](값1, 값2, …};
2) 생성한 후에 개별적으로 초기화
// 방법1
타입[] 배열이름 = new 타입[배열길이];
배열이름[0] = 값1;
배열이름[1] = 값2;
배열이름[2] = 값3;
// 방법2
타입[] 배열이름;
배열이름 = new 타입[]{값1, 값2, …};
배열의 타입
< 배열의 타입 > [3]
배열의 타입
|
초깃값
|
char
|
'\u0000'
|
byte, short, int
|
0
|
long
|
0L
|
float
|
0.0F
|
double
|
0.0 또는 0.0D
|
boolean
|
false
|
배열, 인스턴스 등
|
null
|
장단점
Java의 배열(Array) 장점 첫번째, 가장 기본적인 자료구조로, 구조가 간단하여 구현이 쉽다. 두번째, 검색 속도가 빨라서 인덱스(Index)를 이용한 무작위 접근(Random access)이 가능하므로 검색 부분에서 좋은 성능을 기대할 수 있다. 순차접근(Sequential access)의 경우에도 데이터를 하나의 연속된 메모리 공간에 할당하기 때문에 연결 리스트(Linked list)보다 빠른 성능을 보여준다. 세번째, 배열은 Java의 자료형 중 참조 자료형에 속하는데 참조를 위한 추가적인 메모리 할당이 따로 필요하지않기 때문에 불필요한 메모리 낭비가 없다. [4]
Java의 배열(Array) 단점 첫번째, 자료의 삽입(Insert)과 삭제(Delete)에 비효율적이다. 배열은 연속된 메모리 공간으로 이루어진 자료구조이기에 메모리 자료의 삽입과 삭제를 수행할 경우 다음 항목의 모든 배열의 요소(Element)를 이동시켜야한다. 따라서 자료양에 비례하여 삽입과 삭제에 많은 시간이 소요되기에 그만큼 성능이 떨어지게 된다. 두번째, 배열의 크기를 바꿀 수 없다. 배열은 생성할 때 지정된 크기를 바꿀 수 없기 때문에 예상 공간보다 크게 지정했을땐 메모리가 낭비되고, 예상 공간보다 작게 지정했을땐 메모리가 부족해 저장해야할 자료를 저장할 수 없게 된다. 세번째, 메모리의 재사용이 불가능하다. 배열은 초기에 지정한 크기만큼 메모리를 할당 받아서 사용하기 때문에 데이터의 존재 유무와 상관없이 일정한 크기의 메모리 공간을 차지하고 있다. 즉, 이미 삭제된 데이터라고 하더라도 배열 자체가 메모리에서 제거되지 않는 이상 삭제된 데이터의 메모리 공간을 재사용 하는건 불가능하다. [4]
종류
1차원 배열
1차원 배열은 같은 자료형들을 모아둘 수 있는 묶음이 하나밖에 없는 경우를 의미한다. [5]
1차원 배열은 위에 설명한 선언 방법, 초기화 방법과 동일하다.
Ex1) 선언 및 생성 후 초기화
int[] weight = new int[3]; // 배열 선언 및 생성
weight[0] = 40; // 배열 초기화
weight[1] = 83;
weight[2] = 57;
Ex2) 선언 후 생성 및 초기화
int[] weight;
weight = new int[]{40, 83, 57};
Ex3) 선언과 동시에 초기화
int[] weight = {40, 83, 57};
Ex4) 선언 및 생성과 동시에 초기화
int[] weight = new int[]{40, 83, 57};
다차원 배열
다차원 배열(multi-dimensional array)은 2차원 이상의 배열을 의미한다. N차원 배열은 배열 요소로 (N-1)차원 배열을 가지는 배열이다. [6]
2차원 배열
2차원 배열(Two dimensional array)은 배열의 요소로 1차원 배열을 가지는 배열이다. Java에서는 2차원 배열을 나타내는 타입을 따로 제공하진않지만, 1차원 배열의 배열 요소로 또 다른 1차원 배열을 사용하여 2차원 배열을 나타낼 수 있다. [6]
1. 타입[][] 배열이름;
2. 타입 배열이름[][];
1) 배열 생성과 동시에 초기화
타입[][] 배열이름 = {{값[0][0], 값[0][1],값[0][2]},{값[1][0], 값[1][1],값[1][2]}, …};
2) 생성한 후에 개별적으로 초기화
타입[][] 배열이름 = new 타입[행길이][열길이];
배열이름[0][0] = 값1;
배열이름[0][1] = 값2;
배열이름[0][2] = 값3;
배열이름[…][…] = …;
가변 배열
가변 배열은 Java에선 2차원 이상의 배열에 대해서 '배열의 배열' 형태로 처리하기 때문에 보다 자유로운 형태의 배열을 구성할 수 있다. 다차원 배열을 생성할 때 전체 배열 크기 중 마지막 배열 크기를 정하지않고, 후에 각각 다른 크기의 배열을 생성함으로써 고정된 형태가 아닌 동적인 배열을 구성하는 것을 의미한다. [7]
타입 배열이름[][] = new 타입[행길이][(빈칸)][8]
Ex1) 선언 및 생성
int weight[][] = new int[3][];
weight[0] = new int[3];
weight[1] = new int[2];
weight[2] = new int[1];
Ex2) 선언 및 초기화
int weight[][] = { {3, 2, 1}, {1}, {2, 1} };
각주
- ↑ 〈java 배열 Array〉, 《개인블로그》, 2016-07-03
- ↑ 〈Arrays in Java〉, 《GeeksforGeeks》
- ↑ 3.0 3.1 3.2 〈1차원 배열〉, 《TCPSCHOOL.com》
- ↑ 4.0 4.1 〈배열(Array)의 장단점〉, 《개인블로그》
- ↑ 〈배열(Array), 배열 상속 도식도, 배열의 종류〉, 《개인블로그》
- ↑ 6.0 6.1 6.2 〈다차원배열〉, 《TCPSCHOOL.com》
- ↑ 〈배열(Array)〉, 《개인블로그》, 2016-01-28
- ↑ 〈자바 가변 배열 알아보기〉, 《개인블로그》, 2019-01-17
참고자료
같이 보기
이 배열 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.
|
개발 : 프로그래밍 □■⊕, 소프트웨어, 데이터, 솔루션, 보안, 하드웨어, 컴퓨터, 사무자동화, 인터넷, 모바일, 사물인터넷, 게임, 메타버스, 디자인
|
|
프로그래밍 언어
|
ASP • C 언어 • C++ • C# • CSS • D 언어 • HTML • HTML5 • JSP • PHP • R • XHTML • XML • XSLT • 고(Go) • 고급언어 • 기계어 • 델파이 • 러스트 • 루비 • 루아 • 리액트 • 리퀴디티 • 무브 • 미켈슨 • 베이직 • 브이비스크립트 • 비주얼 C++ • 비주얼베이직(VB) • 비주얼베이직닷넷(VB.NET) • 솔리디티 • 스몰토크 • 스위프트 언어 • 스칼라 • 스크립트 언어 • 알골 • 어셈블리 • 언리얼스크립트 • 얼랭 • 에이잭스(Ajax) • 엠에프씨(MFC) • 오브젝티브-C • 오브젝트 파스칼 • 오카멜 • 웹어셈블리(WASM) • 이와즘(eWASM) • 자바 • 자바스크립트 • 저급언어 • 제이슨(JSON) • 제이쿼리(jQuery) • 카멜 • 코볼 • 코틀린 • 콜드퓨전 • 타입스크립트 • 파스칼 • 파워스크립트 • 파이썬 • 펄(Perl) • 포트란 • 프로씨(Pro-C) • 피엘에스큐엘(PL/SQL) • 피엘원(PL/I) • 하스켈
|
|
개발방법론
|
CBD 개발방법론 • EA • 구조적 개발방법론 • 객체지향 개발방법론 • 라이브러리 • 람다 아키텍처 • 모듈 • 모듈화 • 벤치마킹 • 소프트웨어 개발방법론 • 스크럼 • 스프린트 • 아키텍처 • 아키텍트 • 애자일 • 웹개발방법론 • 정보공학 개발방법론 • 컴포넌트 • 테일러링 • 템플릿 • 폭포수 모델 • 프로젝트 • 프로토타입 • 피드백
|
|
코딩
|
EUC-KR • UTF-8 • 값 • 글루웨어 • 노팔로우 링크 • 두팔로우 링크 • 디버깅 • 디코딩 • 마크업 • 버그 • 부트스트랩 • 세이브포인트 • 소스코드 • 시큐어코딩 • 아스키 • 액티브엑스 • 오픈소스 • 유니코드 • 인코딩 • 재컴파일 • 주석 • 컴파일 • 컴퓨터 프로그램 • 코드 • 코딩 • 태그 • 테스트 • 테이블 • 텍스트 • 파싱 • 퍼블리싱 • 퓨니코드 • 하드코딩 • 하이퍼링크 • 하이퍼텍스트
|
|
프로그래밍
|
C 명령어 • 객체 • 객체지향 • 객체지향 프로그래밍 • 거짓 • 관계연산자 • 기본형 변수 • 널 • 논리 • 논리연산 • 논리연산자 • 다중상속 • 다형성 • 대입 • 대입문 • 대입연산자 • 더블 • 도스 명령어 • 디폴트 • 레지스터변수 • 루프 • 리눅스 명령어 • 리턴 • 메모리 주소 • 메소드 • 멤버 • 명령문 • 명령어 • 무한루프 • 문자 • 문자열 • 바이트 • 반복문 • 배열 • 변수 • 분기 • 분기문 • 불린 • 브레이크 • 비교연산자 • 비트연산자 • 산술연산자 • 상속 • 상수 • 생성자 • 선언 • 선언문 • 설정자 • 속성 • 스위치 • 스태틱 • 시프트연산자 • 실행 • 실행문 • 어노테이션 • 에코 • 역참조 • 연산 • 연산문 • 연산자 • 오버로딩 • 오버라이딩 • 외부변수 • 윈도우 명령어 • 유닉스 명령어 • 인스턴스 • 인스트럭션 • 인클루드 • 인터페이스 • 임포트 • 입력 • 입력문 • 입출력 • 입출력문 • 자료형(데이터 타입) • 자바 명령어 • 자바 예약어 • 자바 컬렉션 • 전역변수 • 접근자 • 접근제어자 • 정보은닉 • 정수형 • 정적변수 • 제어 • 제어문 • 제어자 • 조건 • 조건문 • 조건연산자 • 주소 • 증감연산자 • 지역변수 • 참 • 참조 • 참조변수 • 초기화 • 추상메소드 • 추상클래스 • 추상화 • 출력 • 출력문 • 캡슐화 • 케이스 • 클래스 • 파라미터(매개변수) • 파이널 • 패키지 • 퍼블릭 • 포인터 • 프라이빗 • 프로텍티드 • 필드(멤버변수) • 함수 • 환경변수
|
|
명령어
|
abstract • array • boolean • break • byte • case • char • continue • default • double • do while • echo • elif • else • else if • false • final • float • for • gosub • goto • if • if else • import • include • int • join • long • long long • null • print • printf • println • private • protected • public • return • scanf • short • stdio.h • static • string • switch • temp • then • true • unsigned • void • while
|
|
디자인패턴
|
구조패턴 • 동시성패턴 • 동시실행패턴 • 모델-뷰-컨트롤러 패턴 • 상태패턴 • 생성패턴 • 싱글톤패턴 • 아키텍처패턴 • 전략패턴 • 커맨드패턴 • 행동패턴
|
|
프로그래밍 인물
|
귀도 반 로썸 • 그레이스 머레이 호퍼 • 니클라우스 비르트 • 댄 브릭클린 • 더그 커팅 • 데니스 리치 • 리누스 토르발스 • 리처드 그린블라트 • 마거릿 해밀턴 • 마크 앤드리슨 • 빈트 서프 • 빌 게이츠 • 빌 조이 • 스티브 잡스 • 에이다 러브레이스 • 제임스 고슬링 • 척 벤턴 • 켄 톰슨 • 팀 패터슨
|
|
위키 : 자동차, 교통, 지역, 지도, 산업, 기업, 단체, 업무, 생활, 쇼핑, 블록체인, 암호화폐, 인공지능, 개발, 인물, 행사, 일반
|
|
개발 : 프로그래밍, 소프트웨어, 데이터 □■⊕, 솔루션, 보안, 하드웨어, 컴퓨터, 사무자동화, 인터넷, 모바일, 사물인터넷, 게임, 메타버스, 디자인
|
|
데이터
|
ACID • CRUD • CSV • DAO • DB • DBMS • DB 명령어 • DCL • DDL • DML • DTO • ERD • ETL • JDBC • LOD • MDM • ODBC • RDBMS • RDF • SQL • 가상 데이터베이스 • 관계형 데이터베이스 • 그래프 • 기본키(PK) • 내부조인 • 널 • 노드 • 다이어그램 • 대리키 • 대체키 • 데이터 • 데이터댐 • 데이터마트 • 데이터 모델링 • 데이터뱅크 • 데이터베이스(DB) • 데이터베이스 언어 • 데이터 사이언스 • 데이터 사전 • 데이터 웨어하우스 • 데이터 정의어(DDL) • 데이터 제어어(DCL) • 데이터 조작어(DML) • 데이터 클러스터 • 데이터 토큰 (문자열) • 데이터 통합 • 덱 • 디비서버 • 라이트조인 • 락 • 레코드 • 레프트조인 • 로그 • 로그파일 • 로깅 • 롤백 • 리두로그 • 릴레이션 • 마스터데이터 • 마스터데이터관리(MDM) • 마이그레이션 • 메타데이터 • 배열 • 뷰 • 빅데이터 • 서브쿼리 • 수퍼키 • 순차리스트 • 스키마 • 스택 • 슬로우쿼리 • 엔티티 • 역정규화 • 연결리스트 • 외래키(FK) • 외부조인 • 인덱스 • 인덱싱 • 인젝션 • 자료구조 • 정규화 • 정보 • 조인 • 커밋 • 쿼리 • 큐 • 키 • 타깃 • 테이블 • 튜플 • 트랜잭션 • 트리 • 트리거 • 티비마이그레이터 • 풀조인 • 프로시저 • 필드 • 해시 • 해시맵 • 해시태그 • 해시테이블 • 해시함수 • 해싱 • 후보키
|
|
데이터베이스 관리 시스템 (DBMS)
|
관계형 데이터베이스 관리 시스템(RDBMS) • 노에스큐엘(NoSQL) • 데이터베이스 관리 시스템(DBMS) • 더비 • 디비투(DB2) • 레디스 • 마리아디비(MariaDB) • 마이에스큐엘(MySQL) • 몽고디비 • 빅테이블 • 사이베이스 • 선디비 • 알티베이스 • 액세스 • 에스큐엘(SQL) • 에스큐엘라이트(SQLite) • 에이치베이스 • 엠에스에스큐엘(MS-SQL) • 오라클(Oracle) • 인터베이스 • 인포믹스 • 카산드라 • 카우치디비 • 큐브리드 • 티베로 • 파이어버드 • 포스트그레스큐엘(PostgreSQL) • 하이퍼테이블
|
|
DB 명령어
|
alter • array • create • delete • drop • from • full join • grant • inner join • insert • join • left join • null • order by • outer join • rename • revoke • right join • select • truncate • update • where
|
|
시스템 연계
|
API • CGI • EAI • ESB • JPA • RSS • SOA • SOAP • SSL • SSO • web3.js • XML • 디비투디비(DB-to-DB) • 레스트풀(RESTful) • 상호운용성 • 시스템 인터페이스 • 신디케이션 API • 오픈 API • 웹 API • 웹개방성 • 윈도우 API • 자바 API • 크롤링 • 프라이빗 API
|
|
위키 : 자동차, 교통, 지역, 지도, 산업, 기업, 단체, 업무, 생활, 쇼핑, 블록체인, 암호화폐, 인공지능, 개발, 인물, 행사, 일반
|
|