음 2주차는 뭔가 정리하기 어렵네
배열 / 메서드 / 객체지향 프로그래밍 /수업 중 꿀팁
으로 나눠서 해도 4일치에 복습을 많이해서 얼마 없겠넹
기존 변수 : 변수 하나에 데이터(객체)를 하나 담는 구조
배열 : 배열 하나에 여러개의 데이터를 담을 수 있는 구조
단 같은 타입이여야함
인덱스가 존재하고 인덱스를 통해 해당 데이터에 접근할 수 있음
인덱스 번호는 0번부터 시작
단점
크기를 유동적으로 바꿀 수 없음.
배열 내부 데이터 추가, 삭제 등이 불편함.
int a[] = new int[5]; // 5는 크기5인 정수형 배열 a
int[] b = {1, 2, 3}; // 1, 2, 3의 데이터를 갖는 정수형 배열
String strVar[] ={“가나”, “다라”. “ab”, “cd”};

배열을 그림으로 설명하면 이런식으로 나온다.
System.out.println(num[0]);
System.out.println(strvar1[3]);
num[1] = 99;
String strVar[1] = “바보”;
배열에 몇 개의 데이터가 들어있는지 확인
.length
System.out.println(num.length);
num 배열의 데이터 크기 확인
변수로 지정해서 사용가능
int numSize = num.length;
주의 : 인덱스랑 크기랑 다르다.
인덱스는 0부터 시작
크기는 1부터 시작
int[] arr = new int[3];
arr배열의 크기는 3 인덱스는 0~2
배열 안의 기본값은 0으로 되어있다.
배열의 크기는 사용하기 전 언제든지 정할 수 있다
int[] num = null;
위에 배열을 만들어 두고
어디든지 가서 배열의 크기를 바꿀 수 있다.
num = new int[5];
import java.util.Arrays; 설치용
Arrays.sort(배열 이름);
을 사용하면 배열 안을 크기 순으로 정리해준다
배열의 0번 인덱스는 최솟값 끝 번호는 최댓값이다.
백준 알고리즘 하다가 알게 된 방법이다.
변수를 활용해서 한 가지 데이터씩 옮기는 방식이다.
// 정렬 알고리즘
//
int[] num = { 3, 2, 1, 5, 4 };
int temp = 0; // swap을 위한 중간 저장용
for (int i = 0; i < num.length; i++) {
for (int j = i+1; j < num.length; j++) {
if (num[j] < num[i]) { // 비교
temp = num[i];
num[i] = num[j];
num[j]=temp;
}
}
}
System.out.println(num[0]);
System.out.println(num[1]);
System.out.println(num[2]);
System.out.println(num[3]);
System.out.println(num[4]);
중간저장을 해서 숫자를 교환할 수 있게 해주는 방법을 swap이라고 한다

이걸 메서드로 정리하는 것이 맞는 것일까...
일단 정리해보자 딱히 생각나는 단어가 없어
스트링 클래스에서 같은 내용을 찾을 때 사용
크래스 타입에서 == 는 될 수도 있고 안 될 수도 있다.
기본형 변수 (primitive)
변수 자체에 값이 들어있다.
참조형 변수 (reference)
변수의 주소에 값이 들어있다.
String a = “종료”;
String b = “종료”;
참조형 변수에 같은 값(ex”종료”)을 넣어 주더라도 컴퓨터는 값을 보고 하는 것이 아니라 주소 값을 비교해서 사람이 생각한 값이랑 다르게 나온다
equals는 실제 주소에 들어 있는 값을 비교해주는 메서드
절대로 변하지 않는 값으로 사용
// 상수 선언 : 값이 절대로 바뀌지 않음
public static final String ANSWERC = "종료";
프로그램을 종료하는 키워드인 종료가 절대로 바뀌지 않을 경우
상수 선언은 모두 대문자로 하는건가?
특정 메서드 안에 소속 될 수 없고 클래스 안에 사용
상수 선언 말고 final 을 사용해서
final String end2 = "종료";
end2에 들어가는 마지막 값이 종료이다
final로 선언한 변수는 다시 대입을 할 수 없다
(Objebt Oriented Programming)
기존의 개발은 하나의 클래스에 모든 코드를 적는 방식
중복 코드, 같은기능 등으로 오류가 날 수도 있다


필드는 파란색 변수는 노란색

객체선언을 해야 클래스에 있는 필드 내용을 가져다 쓸 수가 있다.

객체선언의 우변을 생성자라고 하고 비어있으면 기본생성자라고 한다.

변수의 내용을 설명으로 하자면 이런식으로 되는 것이다.

실제로는 변수 안에는 데이터 주소가 들어있고 데이터는 클래스에 들어있다
변수에 데이터주소가 있는 것을 Stack영역이라고하고
클래스에 변수 내용이 들어가는 것을 Heap영역이라고 한다

People 클래스에
People() {
System.out.println():
}
을 넣어두면 클래스 객체선언을 할 때 사용 된다.?
여러 개의 생성자를 선언 할 수 있지만 다른 생성자를 선언하기 이전에 기본 생성자를 먼저 선을 해줘야한다.
위치는 상관 없네
People 클래스는 수동적이라
main 메서드에서 객체를 호출 해줘야지 사용을 할 수 있다.
main 메서드는 단 하나만 있어야 한다.


System.out.println(p3.age); // 11
System.out.println(p3.name); // 이름3
System.out.println(p3.nation); // 스위스
매개 값 자리에 같은타입의 변수를 넣어도 활용 가능
생성자는 매개변수 타입, 개수 등을 다르게 하여 여러 개 선언이 가능함

매개 변수는 다양하게 활용이 가능하다.
안에 프린트 메서드를 넣어도 가능
this. : 현재 클래스의 필드를 가리킬 때 사용

없으면 no effect 오류가 난다.
아무런 효과가 없다
매개 변수의 타입의 위치, 숫자가 같으면 생성이 안된다

[리턴타입] 매서드 이름() {
메서드 실행내용
}

리턴 O
리턴 데이터 타입 메서드이름() {
실행내용;
return 리턴데이터; (필수)
}
클래스 안에

메인 메서드 클래스에서

리턴 X
void 메서드이름() {
실행내용;
}


1번 처럼하면 소수점 이하는 구할 수 없음
2번 처럼하면 소수점은 나오지만 결과는 소수점을 버린상태에서 소수점이 생김
3번 처럼해야지 결과값을 소수점까지 구할 수 있음
2주차 정리 끝
4일치라서 얼마 안되긴하네
이제 점점 어려워 지기 시작하는구만
과제도 내주고 하려나....