종합문제 피드백
1. 인덱스 안에 바로 증감 연산자 써도됨
아래 두 코드는 같은 코드이다
1.
if(!isOverlapped) {
lotto[idx] = randomNum;
idx++;
}
=
if(!isOverlapped) {
lotto[idx++] = randomNum; // 저장 이후에 증가 됨
}
반복문을 몇번 실행해야할지 알 때 => for
몇번 실행해야하는지 모를 때 => while
1 2 2 2 2
3 1 2 2 2
3 3 1 2 2
3 3 3 1 2
3 3 3 3 1 출력하기
인덱스로만 보면
(0,0) (0, 1) ... (0,4)
(1,0) (1, 1) ... (1,4)
(2,0) (2,1) (2,2) ... (2,4)
int[][] newArr = new int[5][5];
for (int i = 0; i<5; i++){
for (int j = 0; j<5; j++) {
if (i == j) { // 만약 i랑 j랑 같으면
newArr[i][j] = 1;
} else if (j > i) { // j가 i보다 크면
newArr[i][j] = 2;
} else { // j가 i보다 작으면
newArr[i][j] = 3;
}
}
}
for (int i =0; i<5; i++) {
for (int j=0; j<5; j++){
System.out.print(newArr2[i][j] + " ");
}
System.out.println();
}
// 결과
1 2 2 2 2
3 1 2 2 2
3 3 1 2 2
3 3 3 1 2
3 3 3 3 1
객체란?
ex.
[현실세계]
사람 - 사람 객체
[속성] 이름, 나이 [필드] 이름, 나이
[동작] 웃다, 먹다 -> [메서드] 웃다, 먹다
자동차 - 자동차 객체
[속성] 색깔, 속도 -> [필드] 색깔, 속도
[동작] 달린다, 멈춘다 [메서드] 달린다, 멈춘다
객체 간의 관계
객체 지향 프로그래밍의 특징
1. 캡슐화 : 객체의 필드, 메소드를 하나로 묶고 실제 구현 내용을 감추는 것을 말한다. 외부 객체는 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다. 접근 제한자(ex. Publie, Private)를 통해 공개 여부를 정할 수 있다.
상속 : 하위 객체에게 상위 객체가 가진 필드와 메소드를 물려주는 것을 말한다. 객체를 재사용해서 쉽고 빠른 설계가 가능하게 하고 반복된 코드의 중복을 줄여준다는 장점이 있다.
다형성 : 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다. 부모 타입에는 모든 자식 객체가 대입될 수 있고, 인터페이스 타입에는 모든 구현 객체가 대입될 수 있다.
ex. 타이어 인터페이스 타입 적용했다면 어떤 타이어가 와도 대입 가능, 핸드폰에 여러 종류의 케이스
객체와 클래스
현실세계 : 설계도 -> 객체
자바 : 클래스 -> 객체
클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있고 이 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다. 하나의 클래스로 여러 개의 인스턴스를 만들 수 있다.
ex. 하나의 설계도로 여러 대의 자동차
클래스 선언
변수 이름 -> 자바 식별자 작성 규칙을 따른다.
번호 | 작성규칙 | 예시 |
---|---|---|
1 | 하나 이상의 문자로 이루어져야 한다 | Car, SportsCar |
2 | 첫 번째 글자는 숫자가 올 수 없다 | Car, |
3 | '&', '_' 외의 특수 문자는 사용할 수 없다 | $Car, _Car, |
4 | 자바 키워드는 사용할 수 없다 |
+) 단일 단어라면 첫 자를 대문자, 단어가 혼합되어 있다면 각 단어의 첫머리 글자는 대문자
+) 소스 파일 하나당 두개 이상의 클래스 선언도 가능하지만, 파일 이름과 동일한 이름의 클래스 선언에만 public 접근 제한자를 붙일 수 있다. 가급적이면 소스 파일 하나당 동일한 이름의 클래스 하나를 선언하는 것이 좋다
클래스와 객체 선언
new 연산자 사용
클래스 변수;
변수 = new 클래스(); // 힙 영역에 생성, 객체의 주소 리턴
클래스 변수 = new 클래스();
ex.
public class Student {
}
public class StudentExample {
public static void main(String[] args){
Student s1 = new Student();
System.out.println("s1 변수가 Student 객체를 참조합니다.");
Student s2 = new Student();
System.out.println("s2 변수가 Student 객체를 참조합니다.");
}
}
// s1이 참조하는 객체와 s2가 참조하는 객체는 다르다.
클래스의 용도
1. 라이브러리(API)용 - 다른 클래스에서 이용할 목적으로 설계 ex. Student
2. 실행용 - 프로그램의 실행 진입점인 main() 메소드를 제공하는 역할 ex. StudentExample
라이브러리인 동시에 실행 클래스로 만들 수도 있다
클래스의 구성 // 생략되거나 복수개가 작성될 수 있다.
public Class Person {
// 필드
String name;
// 생성자
Person() {
}
// 메소드
printName();
}
분류 | 데이터 타입 | 초기값 | |
---|---|---|---|
byte | 0 | ||
char | u0000(빈 공백) | ||
정수타입 | short | 0 | |
기본타입 | int | 0 | |
long | 0L | ||
실수타입 | float | 0.0F | |
double | 0 | ||
논리타입 | boolean | false | |
배열 | null | ||
참조타입 | 클래스(String포함) | null | |
인터페이스 | null |
Car myCar = new Car();
System.out.println(myCar.maxspeed); // 필드값 읽기
myCar.maxSpeed = 60; // 필드값 변경
생성자 선언
클래스 (매개변수 선언, ...) {
// 객체의 초기화 코드
}
필드의 초기화
1. 필드 선언할 때 초기값 주는 것
2. 생성자에서 초기값 주는 것
public class Korean {
String nation = "대한민국";
String name;
String ssn;
}
Korean k1 = new Korean();
Korean k2 = new Korean();
// k1과 k2의 필드값이 같다
// k1과 k2의 주소는 서로 다르다
public class Korean {
String nation = "대한민국";
String name;
String ssn;
public Korean(String n, String s) {
name = n;
ssn = s;
}
}
Korean k1 = new Korean("박자바", "011225-1234567);
Korean k2 = new Korean("김자바", "930525-0654321);
public Korean(String name, Stromg ssn) {
this.name = name;
this.ssn = ssn;
}
public class Person {
String name;
String age;
//생성자 오버로딩(Overloading)
Person(){ //기본생성자 매개변수X
}
//생성자
Person(String name, int age){ //매개변수 이름, 나이 둘다
this.name = name;
this.age = age;
}
Person(String _name){ //매개변수 이름만
name = _name;
age = 1;
}
Person(int age){ //매개변수 나이만
this.age = age;
name = "이름없음";
}
}
powerOn() {..} // 리턴값이 없는 경우 단순하게 메서드만 수행하면 됨
double result = divide(10, 20); // 리턴값이 double인 경우
double divide(int x, int y){...}
double result = divide(10, 20); // 매개 변수가 int타입이면 매개값에는 int나 int로 변환될 수 있는 값을 넘겨주어야한다.
byte b1 = 10;
byte b2 = 20;
double result = divide(10.5, 20.5) // 에러
double result2 = divide(b1, b2); // byte는 int로 변환 가능. 에러 발생 X