티스토리 뷰

자료구조

데이터를 어떻게 조직화하고 저장하며 접근할지 결정하는 방법

자료구조의 특징
  • 효율성: 데이터를 효율적으로 저장, 검색, 삽입, 삭제할 수 있어야 함.
  • 추상화: 데이터의 논리적인 구조와 물리적인 구현을 분리하여 추상적으로 정의해야 함.
  • 재사용성: 여러 응용 프로그램에서 재사용할 수 있도록 일반적이고 유연한 구조여야 함.
자주 사용되는 자료 구조: 배열, List, Map, Set, 스택, 큐, 트리 등

 

배열

연관된 데이터를 모아서 통으로 관리하기 위해서 사용하는 데이터 타입

 

배열의 특징
  • 동일한 자료형의 순차적 자료 구조
  • 인덱스 연산자 [ ] 를 이용하여 빠른 참조 가능
  • 물리적 위치와 논리적 위치 동일
  • 배열의 순서는 0부터 사작(인덱스라고 함)
  • 자바에서 객체 배열을 구현한 ArrayList를 많이 활용함
  • 사용하기 전에 반드시 몇 개의 데이터가 들어갈지 크기를 지정해야 사용할 수 있음.
  • 배열은 보통 반복문과 함께 쓰임.
  • 배열의 크기와 요소의 크기는 동일하지 않을 수 있어서 방어적 코드를 작성해야 함.  ex) 5칸인데 값이 3개만 들어간 경우

 

변수와 배열의 차이
변수: 하나의 데이터를 저장하기 위한 것
배열: 여러 개의 데이터를 하나의 변수에 저장하기 위한 것

 

 

배열 선언과 초기화

int[] arr1 = new int[10];// int 데이터 타입 바로 뒤에 [] 사용 한 후 변수명 작성
int arr2[] = new int[10];

int = 개 당 4byte x 10개 = 40byte를 저장할 수 있음.

heap 메모리에 배열을 10개 저장할 수 있는 공간만 형성한 것이고 값을 넣은 것이 아님.

arr1이라는 변수에 주소를 담음.

index의 길이는 0~9까지이다. 즉, 배열의 크기가 10이면 index의 길이는 9(n-1)임을 알 수 있음. 

 

 

예시1)

public static void main(String[] args) {

int[] numbers = new int[3]; // 공간만 선언함.

// int numbers[] = new int[3];

 

// 값을 넣음(초기화)

// numbers 의 배열의 길이 = 3

numbers[0] = 1000;

numbers[1] = 1000;

numbers[2] = 1000; // index의 길이 = 2

 

// 배열 선언과 동시에 초기화

int[] grades = new int[] { 5, 3, 1 }; // 배열 크기:3, 인덱스 크기:2(0,1,2)

int[] grades2 = { 5, 3, 1 }; // new int[] 생략 가능

 

// double 타입 배열

double[] numBox = new double[5]; // double 데이터 타입을 저장할 수 있는 배열 5공간만 형성함

numBox[0] = 10.0;

numBox[1] = 0.5;

numBox[2] = 1.3;

// numBox[3] = 0.0; 값을 초기화 안 하면 자동으로 0.0으로 설정됨.

// numBox[4] = 0.0;

 

// String 타입 배열

String[] name = new String[] { "A", "B", "C" };

// String[] name = {"A", "B", "C"}; -> new String[] 생략

}

 

 

예시2)

public static void main(String[] args) {

String[] names = new String[5]; // 5칸짜리 메모리 공간 할당

 

// 생성 - create

names[0] = "김씨";

names[1] = "나씨";

names[2] = "박씨";

// name[3] = null // 입력하지 않은 값은 null로 설정됨.

// name[4] = null

 

// 수정 - Update

names[0] = "Mr. Kim";

names[1] = "Mr. Na";

names[2] = "Mr. Park";

 

// 삭제 - Delete

names[0] = null;

names[1] = null;

names[2] = null;

 

// 조회 - Read

System.out.println(names); // 주소값이 담겨있음.

System.out.println(names[0]);

System.out.println(names[1]);

// System.out.println(names[5]);// 중간에 들어가서 오류 발생

System.out.println(names[2]);

System.out.println(names[3]);

System.out.println(names[4]);

// System.out.println(names[5]);// 배열의 크기: 5, 인덱스의 길이: 4 인데 5로 입력해서 오류발생

}

* null 값은 할당되지 않은 상태를 의미

삭제된 후 조회했기 때문에 null이 출력됨.

 

 

예시3)

public static void main(String[] args) {

 

String[] arrayStr = new String[26]; // 26 번 반복됨.

 

arrayStr[0] = "A";

arrayStr[1] = "B";

arrayStr[2] = "C";

arrayStr[3] = "D";

arrayStr[3] = "E"; // => 덮어씌우기 되어 D가 아닌 E가 출력됨.

arrayStr[25] = "Y"; // -> 요소의 개수가 5개(0,1,2,3,25) 나와야 함.

 

//System.out.println(arrayStr[4]); // -> 값이 없어서 null을 출력함.

 

// 반복문 활용

int eCount = 0;

for (int i = 0; i < arrayStr.length; i++) {

if (arrayStr[i] != null) {

eCount++;

System.out.println(arrayStr[i]);

} // 만약 arrayStr[요소] 가 null이 아니라면(요소가 있다는 의미) 요소가 0부터 하나씩 증가해서 작동하는 요소가 출력됨.

}

System.out.println("배열 안의 요소의 개수는 ? " + eCount);

}

A,B,C,E,Y 가 출력됨.

배열 안의 요소의 개수  eCount 는 5가 출력됨.

 

 

 

메서드 오버로딩

같은 이름의 메서드를 여러 개 정의하는 것

메서드 이름, 매개변수의 타입, 개수, 순서가 달라야 함.

메서드 오버로딩 사용 시 같은 기능을 하는 메서드들을 하나의 이름으로 통일할 수 있어 가독성을 높일 수 있음. 

 

public class Calculator {

public int add(int a, int b, int c) {

return a + b + c;

}

// 문자열 더하는 기능

public String add(String str1, String str2) {

return str1 + str2;

}

}

 

생성자 오버로딩

생성자를 여러개 사용하는 것

// 기본 생성자

public Book() {}

// 생성자(매개변수 2개)

public Book(String title, String author) {

this.title = title;

this.author = author;

}

// 생성자 오버로딩(매개변수3개)

public Book(String title, String author, int totalPage) {

this(title, author);// 반드시 순서대로 먼저 호출되어야 함.

this.totalPage = totalPage; // 나머지는 이후에 호출

}

 

생성자를 하나라도 선언하면 컴파일러는 기본 생성자를 추가하지 않는다.

'Java' 카테고리의 다른 글

Java( 포함관계, 연관, 의존관계)  (0) 2024.04.24
Java(상속, 오버라이드)  (0) 2024.04.24
Java(this, static)  (0) 2024.04.18
Java(접근 제어 지시자/ getter와 setter)  (0) 2024.04.17
Java(생성자, 객체지향 패러다임)  (0) 2024.04.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함