티스토리 뷰
자료구조
데이터를 어떻게 조직화하고 저장하며 접근할지 결정하는 방법
자료구조의 특징
|
배열
연관된 데이터를 모아서 통으로 관리하기 위해서 사용하는 데이터 타입
배열의 특징
|
변수와 배열의 차이 변수: 하나의 데이터를 저장하기 위한 것 배열: 여러 개의 데이터를 하나의 변수에 저장하기 위한 것 |
배열 선언과 초기화
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 |