Array ( 배열 ) , 메서드
배열이란
같은 형의 데이터를 여러 개 사용할 때 많은 변수를 사용하기보다는 배열을 사용하는 것이 효율적
같은 형의 데이터를 하나의 자료구조에 저장할 수 있게 만든 것
지정된 자료형과 개수만큼 메모리 공간을 나란히 확보
개수의 변경이 불가능함
동일한 데이터 타입의 여러 값을 저장하는 데 사용되는 데이터 구조입니다. 배열은 인덱스(위치)를 사용하여 각 요소에 접근할 수 있습니다. 배열은 일반적으로 고정된 크기를 가지며, 한 번 생성되면 크기를 변경할 수 없습니다. 다른 프로그래밍 언어와 마찬가지로, Java에서도 배열은 참조 형식입니다.
배열 변수는 실제로 배열이 저장된 메모리의 주소를 가리키는 참조를 갖습니다.
배열을 생성할 때는 배열의 데이터 타입과 크기를 지정합니다. 예를 들어, int형 배열의 경우 int[], String형 배열의 경우 String[]과 같은 형식으로 선언합니다. 배열의 각 요소는 해당 타입의 값을 가질 수 있습니다.
- 고정된 크기: 배열은 한 번 생성되면 크기가 고정됩니다. 크기를 변경하려면 새 배열을 생성하고 기존 배열의 요소를 복사해야 합니다.
- 인덱스 기반 접근: 배열의 각 요소는 0부터 시작하는 인덱스를 사용하여 접근할 수 있습니다. 예를 들어, 첫 번째 요소는 인덱스 0에, 두 번째 요소는 인덱스 1에 저장됩니다.
- 동일한 데이터 타입: 배열은 동일한 데이터 타입의 값만 저장할 수 있습니다. 예를 들어, int형 배열은 int형 값만 포함할 수 있습니다.
- 참조 타입: 배열 변수는 실제 배열이 저장된 메모리의 주소를 가리키는 참조를 저장합니다.
객체의 번지를 참조하는 타입.
배열, 열거, 클래스, 인터페이스 타입
기본 타입으로 선언된 변수는 값 자체를 저장하지만,
참조 타입으로 선언된 변수는 객체가 생성된 메모리 번지를 저장
배열의 선언
1 차원 배열 name 선언 []를 형이나 이름에 붙입니다.
type name[];
type[] name;
배열 선언 및 초기화
// 타입[] 배열이름 = new 타입[크기];
int[] numbers = new int[5]; // 크기가 5인 int형 배열 생성
String[] names = new String[3]; // 크기가 3인 String형 배열 생성
배열 리터럴로 초기화
// 타입[] 배열이름 = {요소1, 요소2, ...};
int[] numbers = {1, 2, 3, 4, 5}; // 요소가 1, 2, 3, 4, 5인 int형 배열 생성
String[] names = {"Alice", "Bob", "Charlie"}; // 요소가 "Alice", "Bob", "Charlie"인 String형 배열 생성
# 2차원 배열
2차원 배열 name 선언 []를 형이나 이름에 붙입니다
type[][] name;
type name[][];
type[] name[];
배열의 생성
1차원 배열
name = new type[ size ] ;
2차원 배열
name = new type[ size ] [ size ];
배열의 선언과 생성 : 한 문장으로 선언과 생성 가능
type[] name = new type[size];
type name[] = new type[size];
type[][] name = new type[size][size];
type name[][] = new type[size][size];
type[] name[] = new type[size][size];
배열의 선언과 생성의 예
int[] arr;
arr = new int[3];
int[] arr = new int[3];
String[] arr;
arr = new String[3];
String[] arr = new String[3];
int[][] arr = new int[4][3];
String arr[][] = new String[5][5];
예) Ex1
public class Ex1 {
public static void main(String[] args) {
int hap = 0;
//배열 선언과 생성
int[] arr= new int[4]; //aa라는 배열 길이가4
arr[0]=10;
arr[1]=20;
arr[2]=30;
arr[3]=40;
hap = arr[0]+arr[1]+arr[2]+arr[3];
System.out.println("합계:"+ hap);
}
}
int aa[] = {100,200,300,400}; //배열 선언 초기값
int bb[] = new int[] {100,200,300}; //배열 선언, 생성, 초기값
int cc[]; //선언
cc = new int[] {100,200}; //생성, 초기값
int[] dd = new int[1]; //선언 및 생성
dd[0] = 100;
1차원 배열
int[] arr;
arr = new int[3];
2차원 배열
int[][] arr;
arr = new int[3][4];
// 타입[][] 배열이름 = new 타입[행의수][열의수];
int[][] matrix = new int[3][3]; // 3x3 크기의 int형 2차원 배열 생성
// 2차원 배열 생성 및 초기화
int[][] array = {
{10, 20, 30}, // 0번째 행
{40, 50, 60}, // 1번째 행
{70, 80, 90} // 2번째 행
};
System.out.println(array[0][0]); // 출력: 10
System.out.println(array[2][1]); // 출력: 80
확장된 for문
for ( type 변수명 : 배열이름 ){
실행문;
}
예)
int sum = 0 ;
int[] arr = { 10, 20, 30, 40 };
for( int x: arr ){
sum += x;
}
System.out.println( sum );
2차원 배열
int[][] arr = new int[2][2]; //행(row), 열(column)
arr[0][0] = 10;
arr[0][1] = 20;
arr[1][0] = 30;
arr[1][1] = 40;
int[][] arr = {
{10, 20},
{30, 40}
};
Scanner scanner = new Scanner(System.in);
scanner.nextInt();
배열의 복사
얕은 복사(shallow copy)
동일한 메모리를 공유하는 복사
newAry = oldAry;
깊은 복사(deep copy)
동일한 메모리를 사용하지 않는 복사
newAry = oldAry.clone();
# 메서드
메서드는 클래스 내부에 정의되어 있는 함수 또는 동작을 수행하는 코드 블록입니다.
메서드는 프로그램의 코드를 모듈화하고 재사용 가능한 구성 요소로 만듭니다.
각 메서드는 일련의 작업을 수행하고 그 결과를 반환할 수 있습니다. 메서드는 객체 지향 프로그래밍의 핵심 요소 중 하나이며, 클래스의 인스턴스에 대해 작동하는 동작을 정의하는 데 사용됩니다.
기본형
public static void 메서드명() {
}
매개변수
public static void 메서드명(매개변수, 파라미터) {
}
리턴값
public static 반환타입 메서드명(매개변수, 파라미터) {
return 값 ;
}
[접근 제어자] [static 또는 final] [리턴 타입] [메서드 이름]([매개변수 리스트]) {
// 메서드의 실행 내용
return [반환값]; // 선택적으로 반환값을 지정할 수 있음
}
- 접근 제어자는 메서드에 대한 접근 권한을 지정합니다. 예를 들어 public, private, protected 등이 있습니다.
- static 키워드는 정적 메서드를 나타냅니다. 정적 메서드는 클래스 수준에서 호출될 수 있습니다.
- final 키워드는 메서드를 오버라이드할 수 없음을 나타냅니다.
- 리턴 타입은 메서드가 반환하는 값의 데이터 타입을 지정합니다. 만약 메서드가 아무 값도 반환하지 않는다면 void를 사용합니다.
- 메서드 이름은 메서드를 식별하는 이름입니다.
- 매개변수 리스트는 메서드가 받는 입력 값들을 정의합니다. 매개변수가 없는 경우 빈 괄호를 사용합니다.
- 반환값은 메서드가 실행된 후에 반환되는 값입니다. 반환값이 없는 경우 return 문을 사용하지 않거나 return;을 사용합니다.
리턴값이 없는경우
// 리턴값의 자료형이 없는 경우는 void keyword를 활용
// example
public static main(String[] args) {
System.out.println("Hello world!");
}
리턴값이 있는경우
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
제어자 반환타입 메서드이름(매개변수 목록) {
메서드 본문
}
제어자(Modifier): public , static 과 같은 부분 , 지금은 항상 public static 키워드를 입력
반환 타입(Return Type): 메서드가 실행 된 후 반환하는 데이터의 타입을 지정합니다. 메서드가 값을 반환하지 않 는 경우, 없다는 뜻의 void 를 사용해야 합니다. 예) void print(String str)
메서드 이름(Method Name): 메서드의 이름. 이 이름은 메서드를 호출하는 데 사용됩니다.
매개변수(Parameter): 입력 값으로, 메서드 내부에서 사용할 수 있는 변수. 매개변수는 옵션. 입력값이 필요 없는 메서드는 매개변수를 지정하지 않아도 됩니다.. 예) add()
메서드 본문(Method Body): 실제 메서드의 코드가 위치. 중괄호 {} 사이에 코드를 작성합니다.
인수(Argument)와 매개변수(Parameter)
구분 | 매개변수(Parameter) | 인수(Argument) |
정의 | 메서드를 정의할 때 메서드가 받을 입력값을 나타내는 변수 | 메서드를 호출할 때 메서드에 전달하는 실제 값 |
위치 | 메서드 선언부에서 사용 | 메서드를 호출할 때 사용 |
목적 | 메서드가 호출 시 사용할 값을 받을 수 있도록 선언 | 호출 시 메서드로 전달하려는 실제 데이터를 지정 |
종류 | 변수를 선언만 하며 초기값은 없음 | 값을 직접 제공하거나 변수로 전달 |
// 매개변수(Parameter): a, b
public int add(int a, int b) {
실행코드
}
public static void main(String[] args) {
// 인수(Argument): 10, 20
add(10, 20);
}
구성요소 | 설명 | 예시 |
접근제어자 | 메서드에 접근할 수 있는 범위를 정의합니다. | public, protected, private, default(생략) |
제어자 | 메서드의 동작 특성을 정의합니다. | static, final, abstract |
반환형 | 메서드가 반환하는 데이터 타입을 정의합니다. | int, String, void 등 |
메서드 이름 | 메서드의 이름으로, 호출 시 사용됩니다. | calculateSum, main 등 |
매개변수 | 메서드에 전달되는 입력값을 정의합니다. 여러 개의 매개변수는 쉼표로 구분합니다. | (int a, int b) |
코드 블록 | 메서드가 실행할 명령어를 포함합니다. | { return a + b; } |
접근제어자 | 접근 가능 범위 |
public | 모든 클래스에서 접근 가능. |
protected | 같은 패키지 및 하위 클래스에서 접근 가능. |
private | 동일 클래스 내에서만 접근 가능. |
(default) | 같은 패키지 내에서 접근 가능. |
- 자바 메서드는 클래스나 객체의 동작(기능)을 정의하는 코드 블록입니다.
- 메서드는 반환형, 이름, 매개변수를 통해 고유하게 정의되며, return 키워드로 값을 반환할 수 있습니다.
- 메서드는 public, static, void와 같은 키워드를 조합해 다양한 형태로 정의할 수 있습니다.
String 클래스 메서드
메서드 | 설명 |
substring(int start) | 시작 인덱스부터 끝까지의 부분 문자열을 반환합니다. |
substring(int start, int end) | 시작과 끝 인덱스 사이의 부분 문자열을 반환합니다. |
equals(String another) | 두 문자열이 동일한지 비교하여 true 또는 false를 반환합니다. |
equalsIgnoreCase(String another) | 대소문자 구분 없이 문자열을 비교합니다. |
toUpperCase() | 문자열을 대문자로 변환합니다. |
toLowerCase() | 문자열을 소문자로 변환합니다. |
trim() | 문자열 양쪽 끝의 공백을 제거합니다. |
replace(char old, char new) | 문자열의 특정 문자를 다른 문자로 바꿉니다. |
replaceAll(String regex, String replacement) | 정규식을 사용해 문자열을 대체합니다. |
contains(CharSequence s) | 문자열에 특정 문자가 포함되어 있는지 확인합니다. |
indexOf(String str) | 문자열에서 특정 문자의 첫 번째 인덱스를 반환합니다. 없으면 -1 반환. |
lastIndexOf(String str) | 문자열에서 특정 문자의 마지막 인덱스를 반환합니다. 없으면 -1 반환. |
split(String regex) | 정규식으로 문자열을 분리하고, 결과를 배열로 반환합니다. |
startsWith(String prefix) | 문자열이 지정된 접두사로 시작하는지 확인합니다. |
endsWith(String suffix) | 문자열이 지정된 접미사로 끝나는지 확인합니다. |
isEmpty() | 문자열이 비어 있는지 확인합니다. |
matches(String regex) | 문자열이 정규식과 일치하는지 확인합니다. |
join(String delimiter, CharSequence... elements) | 문자열 배열을 구분자로 연결한 문자열을 반환합니다. |
valueOf(Object obj) | 객체를 문자열로 변환합니다. |
length(): 문자열의 길이를 반환합니다
String str = "Hello";
int length = str.length(); // length에는 5가 저장됩니다.
charAt(int index): 지정된 인덱스에 있는 문자를 반환합니다.
char ch = str.charAt(0); // ch에는 'H'가 저장됩니다.
substring(int beginIndex, int endIndex): 문자열의 일부분을 잘라내어 새로운 문자열로 반환합니다.
String substr = str.substring(1, 3); // substr에는 "el"이 저장됩니다.
equals(String another)
String str1 = "Hello";
String str2 = "hello";
System.out.println(str1.equals(str2)); // false
toUpperCase() 및 toLowerCase(): 문자열을 대문자 또는 소문자로 변환합니다.
String upperCase = str.toUpperCase(); // upperCase에는 "HELLO"가 저장됩니다.
String lowerCase = str.toLowerCase(); // lowerCase에는 "hello"가 저장됩니다.
indexOf(String str) 및 lastIndexOf(String str): 문자열 내에서 지정된 문자열이나 문자가 처음으로 나타나는 인덱스를 반환합니다. lastIndexOf()는 뒤에서부터 검색합니다.
해당 값을 찾지 못하면 -1을 반환합니다.
int index = str.indexOf("l"); // index에는 2가 저장됩니다.
int lastIndex = str.lastIndexOf("l"); // lastIndex에는 3이 저장됩니다.
String str = "Hello, world!";
int index1 = str.indexOf('o'); // 'o'가 처음으로 나타나는 위치를 찾습니다. index1에는 4가 저장됩니다.
int index2 = str.indexOf("world"); // "world"가 처음으로 나타나는 위치를 찾습니다. index2에는 7이 저장됩니다.
int index3 = str.indexOf('x'); // 'x'가 문자열 내에 없으므로 -1이 반환됩니다.
startsWith(String prefix) 및 endsWith(String suffix): 문자열이 지정된 접두사 또는 접미사로 시작하는지 또는 끝나는지 여부를 반환합니다.
boolean startsWith = str.startsWith("He"); // startsWith에는 true가 저장됩니다.
boolean endsWith = str.endsWith("lo"); // endsWith에는 true가 저장됩니다.
replace(char oldChar, char newChar) 및 replaceAll(CharSequence target, CharSequence replacement): 문자열 내에서 지정된 문자 또는 문자열을 다른 문자 또는 문자열로 바꿉니다.
String replaced = str.replace('l', 'w'); // replaced에는 "Hewwo"가 저장됩니다.
String str = "abc123";
System.out.println(str.replaceAll("\\d", "*")); // abc***
trim(): 문자열의 앞뒤에 있는 공백을 제거합니다.
String withSpaces = " Hello ";
String trimmed = withSpaces.trim(); // trimmed에는 "Hello"가 저장됩니다.
contains(CharSequence s)
String str = "Hello";
System.out.println(str.contains("ell")); // true
split(String regex)
String str = "a,b,c";
String[] parts = str.split(",");
System.out.println(Arrays.toString(parts)); // [a, b, c]
isEmpty()
String str = "";
System.out.println(str.isEmpty()); // true
join(String delimiter, CharSequence... elements)
String[] elements = {"a", "b", "c"};
System.out.println(String.join("-", elements)); // a-b-c
valueOf(Object obj)
int num = 123;
System.out.println(String.valueOf(num)); // 123
java.util.Arrays 메서드
메서드 | 설명 |
toString() | 배열을 문자열로 변환합니다. |
deepToString() | 다차원 배열을 문자열로 변환합니다. |
sort() | 배열을 오름차순으로 정렬합니다. |
binarySearch() | 정렬된 배열에서 특정 값을 이진 탐색으로 찾아 인덱스를 반환합니다. 값이 없으면 음수를 반환합니다. |
copyOf() | 배열을 복사하여 새로운 배열을 생성합니다. |
copyOfRange() | 배열의 특정 범위를 복사하여 새로운 배열을 생성합니다. |
equals() | 두 배열이 같은지 비교하여 true 또는 false를 반환합니다. |
deepEquals() | 다차원 배열의 내용이 같은지 비교합니다. |
fill() | 배열의 모든 요소를 특정 값으로 채웁니다. |
setAll() | 배열의 각 요소를 특정 함수 기반으로 설정합니다. |
stream() | 배열을 스트림으로 변환하여 다양한 스트림 연산을 수행할 수 있습니다. |
asList() | 배열을 리스트로 변환합니다. |
import java.util.Arrays;
public class ArrayExample {
public static void main(String[] args) {
int[] arr = {3, 1, 2};
// 속성: length
System.out.println("길이: " + arr.length);
// 메서드: Arrays.toString()
System.out.println("배열 출력: " + Arrays.toString(arr));
// 메서드: Arrays.sort()
Arrays.sort(arr);
System.out.println("정렬된 배열: " + Arrays.toString(arr));
// 메서드: Arrays.binarySearch()
System.out.println("값 2의 인덱스: " + Arrays.binarySearch(arr, 2));
// 메서드: Arrays.copyOf()
int[] newArr = Arrays.copyOf(arr, 5);
System.out.println("복사된 배열: " + Arrays.toString(newArr));
// 메서드: Arrays.equals()
int[] anotherArr = {1, 2, 3};
System.out.println("배열 비교: " + Arrays.equals(arr, anotherArr));
// 메서드: Arrays.fill()
Arrays.fill(newArr, 9);
System.out.println("채워진 배열: " + Arrays.toString(newArr));
// 메서드: Arrays.stream()
int sum = Arrays.stream(arr).sum();
System.out.println("배열 요소의 합: " + sum);
}
}
결과
길이: 3
배열 출력: [3, 1, 2]
정렬된 배열: [1, 2, 3]
값 2의 인덱스: 1
복사된 배열: [1, 2, 3, 0, 0]
배열 비교: true
채워진 배열: [9, 9, 9, 9, 9]
배열 요소의 합: 6
Arrays.toString()
- 배열을 문자열로 변환하여 출력합니다.
int[] arr = {1, 2, 3, 4};
System.out.println(Arrays.toString(arr)); // 출력: [1, 2, 3, 4]
Arrays.sort()
- 배열을 오름차순으로 정렬합니다.
int[] arr = {4, 1, 3, 2};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // 출력: [1, 2, 3, 4]
Arrays.copyOf()
- 배열을 복사하여 새로운 배열을 생성합니다.
int[] arr = {1, 2, 3};
int[] newArr = Arrays.copyOf(arr, 5); // 크기를 5로 설정
System.out.println(Arrays.toString(newArr)); // 출력: [1, 2, 3, 0, 0]
Arrays.equals()
- 두 배열의 내용이 같은지 비교합니다.
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
System.out.println(Arrays.equals(arr1, arr2)); // 출력: true
Arrays.fill()
- 배열의 모든 요소를 특정 값으로 초기화합니다.
int[] arr = new int[5];
Arrays.fill(arr, 7);
System.out.println(Arrays.toString(arr)); // 출력: [7, 7, 7, 7, 7]
'java' 카테고리의 다른 글
[ JAVA ] class 클래스 (2) | 2024.05.31 |
---|---|
[ JAVA ] 클래스 (0) | 2024.05.17 |
[ java ] 제어문 - 조건문 , 반복문, 분기문 (1) | 2024.01.29 |
[ java ] 자바 프로그램 실행 , 변수와 연산자, 형변환 (1) | 2024.01.08 |
[ java ] 인텔리제이 프로그램 설치 및 설정 (0) | 2024.01.07 |