-절차지향(장점 소규모에는 좋다)과 상반되는 개념
-각 기능을 객체라는 형태로 나눠서 메시지를 주고 받으며 기능을 수행
-여러개의 독립된 단위
-객체들의 집합
-신뢰성있는 sw 작성, 코드 직관적, sw의 생산성 향상, 유지보수에 용이
-객체만들기위한 틀, 설계도(blueprint, definition, ,description) 자료형
-클래스에 설계 후 객체 생성가능
-클래스 구조 : 데이터를 저장할 수 있는 속성-필드 field 와 기능(logic)을 담아 행동을 정의하는 (method)으로 나뉘어져있다.
클래스명 변수명 = new 클래스명();
-created from the class 클래스를 통해 정의됨
-공통된 속성과 행위를 추출하는 기법
-필요한 정보들만 간추려서 구성
-로직부분 제외
-객체 생성 후 메소드 기능 호출할 때는 캡슐화 때문에 직접 필드에 접근하기 보다 메소드를 통해 접근하는게 좋다. <데이터 보호 가능> -> 필드 바로 접근은 조건,오류,버그 방지 안되기 때문
-객체의 필드에 아무것도 넣지 않으면 레퍼런스변수 - null, 기본자료형은 0, false
-getter(리턴있음) setter method (데이터를 넣고 꺼내는 메소드 ) : 자바의 기본 기능이 설정되어있음. alt + shift + s => general getters and setters - > 생성되길 원하는 필드 체크하고 확인!
package exam01; //폴더단위로 묶어서 클래스를 관리할수있다.
public class Bank {
//필드 (속성)-데이터 저장공간
private int money; //금액을 저장하는 필드
//같은 클래스 내에서만 사용가능하게 접근제한자 줌. 데이터 보호
//메소드 사용 이유:
//메소드(기능) - 데이터를 가지고 뭔가 작동하는 것
//입금기능
public void deposit(int money) {
this.money += money;
//매개변수, 입력변수도 똑같이 쓸수있지만 색이 똑같이 나옴
//변수명이 파란색이어야 필드 ->this. 써주면 현재 클래스의 필드변수를 지칭한다
//장점 : 1.객체에서 자동완성쓸때 직관적으로 알 수 있다. 2.변수명하나로 맞출수있다.
}
//잔액보기
public int showMoney() {
return money; //매개변수가 없어서 상관없다.
}
//출금기능
public void withdraw(int outputMoney) {
money -= outputMoney;
}
}
-객체가 생성될때 자동으로 호출되는 특별한 메소드
객체의주소 객체명 = new 생성자(); new를 통해 객체를 생성할 때만 호출됨
-사용자가 생성자를 만들지않아도 컴바일러가 자동으로 만들어줌
-해당 클래스이름과 동일하다
-리턴타입 없음
-객체를 생성할 때 반드시 호출됨
-기본생성자에 매개변수를 넣어주면 그 필드의 변수는 무조건 입력되어야함
-매개변수를 받아서 필드에 채워줘야됨
public Cycle (int a, int b, String c){
this.a(필드) = a; this.b = b; this.c = c;
}
단축키 alt shift s => generate constructor using fields => 필드체크
-동일한 이름의 메소드를 사용하는방법
-둘 중 하나의 조건만 만족하면 동일한 이름의 메소드를 만들 수 있다.
1. 매개변수의 개수가 다를 때 2. 매개변수의 데이터 타입이 다를 때
예제
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Student hrj = new Student("황", "39332", 99, 87, 68);
Student ljn = new Student("이", "1434", 23, 84, 68);
Student pjs = new Student("박", "2342", 23, 57, 88);
Student[] list = { hrj, ljn, pjs };
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("1. 전체이름 보기 2.조회 3.종료 >> ");
int choice = sc.nextInt();
if (choice == 1) {
System.out.println("===전체이름보기===");
for (int i = 0; i < list.length; i++) {
System.out.println(list[i].getName());
}
}
// 이름 입력받고 이름과 일치하는 사람의 이름,학번,평균출력
else if (choice == 2) {
System.out.println("==조회==");
System.out.print("조회할 사람의 이름 입력 : ");
String name = sc.next();
boolean ck = true; // 기본값을 true 해주고
for (int i = 0; i < list.length; i++) {
if (name.equals(list[i].getName())) {
System.out.println(list[i].getName() + "-" + list[i].getStuid() + "-" + list[i].getScore());
ck = false; // 이 if 문을 지나가면 false를 true로 변경 해야됨
}
}
// for문안에서 else를 하면 해당안되는 그 외 값i를 else가 받아서 출력하게됨
for문 다 끝나고나서 출력해야됨
if (ck) { //ck가 true 일때
System.out.println("일치하는 이름이 없습니다.");
}
// 만약 ck가 true라면 if문을 안지나갔으니까 이름을 못찾았다는 얘기잖아요?
}
else if (choice == 3) {
System.out.println("프로그램 종료됩니다");
break;
}
else {
System.out.println("정확한 숫자를 입력해주세요");
}
}
}
}