웹개발_JAVA 8
클래스
공토요소를 한번만 선언해놓고 가져다 사용만 하도록 설계한다.
1. 타입이다.
클래스안에 선언된 변수와 메소드를 사용하고 싶으면,
해당 클래스 타입으로 변수를 선언해야 한다.
2. 주어이다
원숭이가 먹는다 바나나를
Monkey.eat("banana:); (클레스는 주어, 메소드는 동사, 변수는 명사)
클래스 선언
class 클래스명 {
필드(변수, 메소드)
}
package classTest;
class A{
int data; //필드로 구성된 전역변수는 자동 초기화 됨
// A(){} 기본 생성자(클래스 선언시 자동 생성된다고 보면 됨)
String name;
A(String name){
System.out.println(name);
this.name = name;
}
A(int data){
System.out.println(this);
this.data = data; //전역변수랑 지역점수랑 다를때 어떤 객체에 넣을건지
} // this.은 접근한 객체가 가지고있는 필드의 주소값
// 지역변수와 전역변수의 이름이 같지않으면 this는 생략가능
void printData() {
System.out.println(data);
}
}
public class ClassTest {
public static void main(String[] args) {
A a = new A(10);
A b = new A(20);
System.out.println(a);
System.out.println(b);
//a.data = 10;
a.printData();
b.printData();
}
}
클래스의 필드 사용
1. 객체화(instance) : 객체(instance vaiable)를 만드는 작업, 추상적인 개념을 구체화시키는 작업
클래스 명 객체 = new 생성자(); //생성자는 앞글자를 대문자로
// 생성자의 주소값이 변수에 들어가는것
// 객체 초기값은 null
※. (마침표): 하위 연산자, 멤버변수 접근 연산자, 닷 연산자, 점연산자
주소값 뒤에서만 사용이 가능하며, 해당 주소를 잠조하는 명령어이다.
2. static : 모든 객체가 공유해야하는 필드일 경우에 사용한다.
클래스 하나 당 한 개만 생기기 때문에 객체로 접근하지 않고 클래스로 접근한다.
생성자
클래스 이름 뒤에 소괄호가 있는 형태, 메소드와 기능이 똑같지만 메소드라고 부르지 않는다.
생성자는 리턴이라는 기능이 존재하지 않기 때문이다.
1. 해당 클래스의 필드를 메모리에 할당한 후 부여된 주소값을 가져온다.
2. 초기화
기본 생성자
매개변수가 없는 생성자이며, 클래스 선언 시 자동으로 선언된다.
사용자가 직접 생성자를 선언하게 되면 기본 생성자는 없어진다.
this
필드에 접근한 객체가 누구인지 알아야 해당 필드에 접근 할 수 있다.
이 때 접근한 객체가 가지고 있는 필드의 주소값을 this라는 변수에 자동으로 담긴다.
package classTest;
import java.util.Scanner;
//Art+shif+s +o 생성자만들기
class SuperCar {
String brand;
String color;
int price;
boolean engine;
String password;
int errorCount;
// 초기화 블록
{
this.password = "0000";
}
public SuperCar() {;}
public SuperCar(String brand, String color, int price) {
this.brand = brand;
this.color = color;
this.price = price;
}
// 시동 켜기
// 엔진 상태를 확인하고
// 시동이 꺼져있다면, "시동 켜짐" 출력
// 이미 시동이 켜져있다면, "시동이 이미 켜져있습니다." 출력
// boolean engineStart(){
// if(!engine) {
// engine = true;
// return true;
// }
// return false;
// }
void engineStart() {
engine = true;
}
// 시동 끄기
// 엔진 상태를 확인하고
// 시동이 켜져있다면, "시동 꺼짐" 출력
// 이미 시동이 꺼져있다면, "시동이 이미 꺼져있습니다." 출력
boolean engineStop(){
if(engine) {
engine = false;
return true;
}
return false;
}
// void engineStop() {
// engine = false;
// }
// 시동을 켜기 위해서 비밀번호 4자리를 입력받아야 한다.
// 3번 연속 잘못 입력했을 시 "경찰 출동" 출력
// ※ 문자열 비교는 equals()로 비교한다.
// "ABC".equals("문자열");
boolean checkPassword(String password) {
return this.password.equals(password);
}
}
public class ClassTask1 {
public static void main(String[] args) {
SuperCar mom = new SuperCar("페라리", "빨간색", 68_000);
Scanner sc = new Scanner(System.in);
String menu = "1.시동켜기\n2.시동끄기";
int choice = 0;
String password = null;
boolean check = false;
while(true) {
System.out.println(menu);
choice = sc.nextInt();
switch(choice) {
case 1: // 시동 켜기
if(!mom.engine) {
System.out.print("비밀번호: ");
password = sc.next();
if(mom.checkPassword(password)) {
mom.engineStart();
System.out.println("시동 켜짐");
mom.errorCount = 0;
break;
}
mom.errorCount++;
System.out.println(mom.errorCount + "회 비밀번호 오류");
if(mom.errorCount == 3) {
System.out.println("경찰 출동");
check = true;
}
break;
}
System.out.println("이미 시동이 켜져있습니다.");
break;
case 2: // 시동 끄기
if(mom.engineStop()) {
System.out.println("시동 꺼짐");
check = true;
break;
}
System.out.println("이미 시동이 꺼져있습니다.");
break;
}
if(check) {
break;
}
}
// while(true) {
// System.out.println(menu);
// choice = sc.nextInt();
//
// switch(choice) {
// case 1: // 시동 켜기
// if(mom.engineStart()) {
// System.out.println("시동 켜짐");
// break;
// }
// System.out.println("시동이 이미 켜져있습니다.");
// break;
// case 2: // 시동 끄기
// if(mom.engineStop()) {
// System.out.println("시동 꺼짐");
// break;
// }
// System.out.println("시동이 이미 꺼져있습니다.");
// break;
// }
// }
}
}
다형성
1. 오버로딩(Overloading)
매개변수의 개수 또는 타입이 다르면 동일한 이름의 메소드로 선언할 수 있다.
2. 오버라이딩(Overriding)
package classTest;
//학생 클래스
//학생 번호
//국어 점수
//영어 점수
//수학 점수
//
//학생의 점수를 입력 받은 뒤 총점과 평균 출력
//※ 생성자를 사용한다.
public class Student {
int number;
int kor;
int eng;
int math;
int total;
double average;
public Student() {;}
public Student(int number, int kor, int eng, int math) {
this.number = number;
this.kor = kor;
this.eng = eng;
this.math = math;
this.total = kor + eng + math;
this.average = total / 3.0;
}
}
package classTest;
public class ClassTask2 {
public static void main(String[] args) {
Student student = new Student(1, 50, 60, 90);
System.out.println(student.total);
System.out.println(student.average);
}
}
package classTest;
//상점 클래스
//상품명
//상품 가격
//재고
//손님 클래스
//이름
//휴대폰 번호
//통장 잔고
//할인율
//상점에서 상품 판매 시 손님의 할인율을 적용하여 판매
public class Market {
String name;
int price;
int stock;
public Market() {;}
public Market(String name, int price, int stock) {
this.name = name;
this.price = price;
this.stock = stock;
}
void sell(Customer customer) {
customer.money -= price * ((100 - customer.discount) * 0.01);
stock--;
}
}
package classTest;
public class ClassTask3 {
public static void main(String[] args) {
Market market = new Market("새우깡", 1800, 50);
Customer[] arCustomer = {
new Customer("정대만", "01012341234", 10000, 50),
new Customer("송태섭", "01077777777", 1000, 70)
};
for (int i = 0; i < arCustomer.length; i++) {
market.sell(arCustomer[i]);
System.out.println(arCustomer[i].money);
}
}
}