1. 배열
- 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것으로
변수의 저장 공간이 연속적으로 배치된다.
1-1. 배열의 선언과 생성
*기본형 : 타입[ ] 변수이름
*배열을 선언한 다음에는 바로 배열을 생성해야 한다.
int [] score = new int [5];
- 이때 score는 int타입의 5개 배열을 저장할 참조 변수이다.
1) 배열은 기본값으로 자동초기화된다.
2) 배열의 인덱스는 0부터 시작한다. (0~배열길이-1)
3) 위 예시의 경우 score.length = 5이며 index는 0~4까지이다.
4) 이미 생성된 배열의 길이는 변경할 수 없다.
=배열이름. length는 상수이며 값을 읽을 수만 있을 뿐 변경할 수 없다.
->길이를 변경하고 싶으면 새로운 배열을 생성해야 한다.
5) 요소 값에 일정한 규칙이 있다면 대부분 for문을 이용해 초기화하지만
규칙이 없다면 블록을 이용해 직접 초기화한다.
int [] score = {90, 80, 75, 89, 100};
1-2. 배열의 출력
*배열을 출력할 때는 for문을 이용해 변수이름. length가 되도록 출력하지만
더 간단하게 보기 위해서는 Arrays.toString(변수이름) 메서드를 사용한다.
int [] score = {90, 80, 75, 89, 100};
System.out.println(Arrays.toString(score));
------------------------------------------
[90, 80, 75, 89, 100]
*println(score)로 입력 시에는 score가 참조변수이므로 주소값이 출력된다.
-> 그러나 예외적으로 char, string타입의 경우 참조변수로 출력해도 배열로
출력된다.
1-3. String클래스
[String클래스 = char배열 + 기능(메서드)]
*char배열과 달리 String클래스의 String객체는 읽을 수만 있을 뿐
내용을 변경할 수는 없다.
-> 새로운 요소를 가진 저장 공간이 생성되고 그 저장 공간으로 주소값 변경
*String클래스 기본메서드
메서드 | 설명 |
charAt(int index) | 문자열에서 해당 위치의 인덱스에 있는 문자를 반환 |
.length() | 문자열의 길이를 반환 |
substring(int1, int2) | 문자열에서 해당 범위(int1~int2바로 앞)의 문자열 반환 |
equals(””) | 문자열 내용 동일 여부 확인. true/false (대소문자 구분) |
equlasIgnoreCase() | 문자열 내용 동일 여부 확인.(대소문자 무시) |
char[] toCharArray() | 문자열을 문자배열로 변환해서 반환 |
2. 2차원 이상의 배열, 다차원 배열(multi-dimentional)
*기본형:int [][] score = new int [3][4] // 3 - 행, 4-열
*2차원 배열은 주로 테이블 형태의 데이터를 담는 데 사용된다.
*생성과 동시에 초기화하는 방법:
int [][] score = {
{1, 2, 3},
{4, 5, 6},
};
ex.23
int[][] score= { {100, 100, 100}, {20, 20, 20}, {30, 30, 30}, {40, 40, 40}, }; System.out.println(score.length); System.out.println(score[i].length); |
4 //행의 길이 3 //열의 길이 |
3. Arrays클래스 메서드
[1] 1차원 배열의 배열 출력 - Arrays.toString(변수이름)
2차원 배열의 배열 출력 - Arrays.deepToString(변수이름)
[2] 1차원 배열의 동일 여부 - Arrays.equals(변수이름 1, 변수이름 2)
2차원 배열의 동일 여부 - Arrays.deepEquals(변수이름 1, 변수이름 2)
[3] 배열의 복사 - Arrays.copyOf(), Arrays.copyOfRange()
System.arraycopy(num, 0, newNum, 0, num.length);
-> num배열의 index0번부터 newNum의 index 0번에 num.length의 길이만큼 복사한다.
ex.24
int [] arr = {0, 1, 2, 3, 4};
int [] arr2 = Arrays.copyOf(arr, arr.length); // arr2=[0, 1, 2, 3, 4]
int [] arr3 = Arrays.copyOf(arr, 3); // arr3=[0, 1, 2] // 인덱스 3-1까지 출력
int [] arr4 = Arrays.copyOf(arr, 7); // arr4=[0, 1, 2, 3, 4, 0, 0]
int [] arr5 = Arrays.copyOfRange(arr, 2, 4); // arr5=[2. 3]
int [] arr6 = Arrays.copyOfRange(arr, 0, 7); // arr6=[0, 1, 2, 3, 4, 0, 0]
[4] 배열의 정렬 - Arrays.sort(변수이름);
: 배열의 요소를 오름차순으로 정렬한다.
[5] 배열에 저장된 요소 검색 - Arrays.binarySearch()
: 배열에서 지정된 값이 저장된 위치(index) 반환
- 반드시 배열이 정렬된 상태이어야 올바른 결과를 얻는다.
- 검색한 값과 일치하는 요소들이 여러 개일 경우 어떤 것의 위치가 반환될지 알 수 없다.
[6] 배열 채우기 - fill(), setAll()
*fill() - 배열의 모든 요소를 지정된 값으로 채운다.
int [] arr = new int [5];
Arrays.fill(arr, 9); //arr={9, 9, 9, 9, 9}
*setAll() - 배열을 채우는 데 사용할 함수형 인터페이스를 매개변수로 받는다.
Arrays.setAll(arr, (i)->(int)(Math.random)*5)+1);
[7] 배열을 List로 변환 - asList(Object... a)
* Object... a <- 가변식 매개변수로 매개변수의 개수를 자유롭게 변경 가능
크기 변경 및 추가, 삭제가 불가능한 List (읽기만 가능) |
List list = Arrays.asList(new Integer[]{1,2,3,4,5}); List list = Arrays.asList(1,2,3,4,5); list.add(6) // 불가능 - UnsupportedOperationException |
크기 변경 가능한 List |
List list = new ArrayList(Arrays.asList(1,2,3,4,5)); |
4. 가변 배열
case 1: int [][] score = new int [5][3];
-> 5행 3열의 2차원 배열 생성
score [0] = {1, 2, 3};
score [1] = {4, 5, 6};...
case 2: int [][] score = new int [5][]; // 가변 배열
score [0] = {1, 2, 3};
score [1] = {5, 6, 7, 8, 0};...
5. 객체지향 언어
(1) 객체 : 실제로 존재하는 것. (인스턴스 변수의 묶음/iv 변수의 묶음)
(2) 프로그래밍 에서의 객체 : 유형체+무형체; 클래스에 정의된 내용대로 메모리에 생성된 것
(3) 객체지향 장점
- 코드의 재사용성이 높다.
- 코드의 유지보수가 용이하다.
- 신뢰성이 높은 프로그래밍으로 중복된 코드 제거 용이
5-1.class/클래스
(1) 클래스란? ①객체를 정의해 놓은 것으로 객체를 생성하는 데 사용(설계도)
②데이터+함수의 결합
③사용자 정의 타입 - 원하는 타입 직접 생성 가능
변수 | 배열 | 구조체 | 클래스 | |
1 | 1 | 1 | 1 | +함수 |
2 | 10.0f | 10.0f | ||
3 | ‘a’ | ‘a’ |
*변수 : 하나의 데이터를 저장할 수 있는 공간
*배열 : 같은 타입의 여러 데이터를 하나로 저장하는 공간
*구조체 : 서로 관련된 여러 데이터를 종류에 관계없이 하나로 저장할 수 있는 공간
*클래스 : 데이터와 함수의 결합(구조체+함수)
ex25.
int hour = 12; int minute = 34; int second = 56; |
Time t = new Time(); t.hour = 12; t.minute = 34; t.second = 56; |
=>둘 다 똑같은 값을 가지고 있지만 왼쪽은 비객체지향적 코드, 오른쪽은 객체지향적인 코드로 서로 강하게 연결돼 있다. |
(2) 객체 - 속성(property)과 기능(function)으로 이루어져 있다.
이 두 속성과 기능을 그 객체의 멤버(멤버 변수)라고 한다.
*속성은 변수(variable), 기능은 메서드(method)로 표현
(3) 인스턴스화(instantiate)
: 클래스로부터 객체를 만드는 과정으로, 이때 만들어진 객체를 인스턴스
(instance)라고 한다.
5-2. 객체의 생성과 사용
*기본 구조 : 클래스명 변수명 = new 클래스명();
*클래스의 객체를 참조하기 위한 참조변수를 선언하고, 클래스 객체 생성과 주소를 참조변수에 저장한다.
ex26.
<객체의 생성> class Mountain { Mountain tree = new Mountain(); } <객체의 사용> tree.channel = 7; tree.channelDown(); |
5-3. 객체 배열(==참조변수 배열)
Tv tv1, tv2, tv3; => Tv[] tvArr = new Tv[3]; => 객체배열 생성 |
tvArr[0] = new Tv(); tvArr[1] = new Tv(); tvArr[2] = new Tv(); => 1)객체배열 생성 이후 2)각 배열에 대한 객체 생성 별도 필요 |
6. 선언 위치에 따른 변수의 종류
class Variables { int iv; // 인스턴스 변수 static int cv; // 클래스 변수(static변수, 공유변수) void method() { int lv = 0; // 지역변수 } } |
- 클래스 영역에는 변수 선언/메서드 선언만 가능하다.
- 변수 선언과 메서드 선언의 순서는 정해지지 않는다.
*생성시기
1) 클래스 변수->클래스가 메모리에 올라갈 때 (객체 생성 필요 x)
2) 인스턴스 변수->인스턴스(객체)가 생성되었을 때
3) 지역 변수->변수 선언문이 수행되었을 때
7. 메서드(method)
: 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것(≒함수)
- 선언부와 구현부로 이루어져 있다.
*기본형 : 반환타입 메서드이름 (타입 변수명, 타입 면수명) {구현부}
int add(int a, int b) {
int result = a+b;
return result;
}
*매개변수 : 메서드가 작업을 수행하는데 필요한 값들을 제공받기 위한 것.
- 일반적인 변수선언과 달리 두 변수의 타입이 같아도 변수 타입 생략 불가능
(1) 기본형 매개변수 - 변수의 값을 읽기만 할 수 있다. (read only)
(2) 참조형 매개변수 - 변수의 값을 읽고 변경한다. (read&write)
8. return문
- 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다. (필수)
다만, 반환 타입이 void일 경우에는 생략 가능(이외 불가능)
- 반환타입과 return타입이 일치해야 한다. (자동형 변환 가능)
ex.27
int max(int a, int b) { if(a>b) return a; } |
int max(int a, int b) { if(a>b) return a; else return b; } |
if안의 타입만 참일때 결과가 출력되고 그 외의 결과엔 출력되지 않아 return문이 없는 것으로 간주된다. | 이렇게 해야함. |
9. 호출스택(call stack)
(1) 스택(stack) : 밑이 막힌 상자. 위에 차곡차곡 쌓인다.
넣을 때 : ①→②→③.....
꺼낼 때 :.....③→②→①
(2) 호출 스택 : 메서드 수행에 필요한 메모리가 제공되는 공간
-> 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
-> 하나의 스택에서는 맨 위의 메서드 하나만 실행되고 나머지는 대기 상태
'Study > Java' 카테고리의 다른 글
06. <제어자, 캡슐화, 다형성, 형변환, 인터페이스 > ~자바의 정석 summary ~ (0) | 2023.01.13 |
---|---|
05. <오버로딩, 생성자, 상속, 포함 > ~자바의 정석 summary ~ (0) | 2023.01.12 |
03. <제어문, 화면으로부터 입력받기> ~자바의 정석 summary ~ (0) | 2023.01.10 |
02. <타입변환, 형변환, 연산자> ~자바의 정석 summary ~ (0) | 2023.01.09 |
01. <변수, 상수, 리터럴, 지시자> ~자바의 정석 summary ~ (4) | 2023.01.08 |
댓글