JAVA - DAY7 -Class

#1 - JAVA의 객체지향적 성격과 class , #2와 #3을 이용하여 객체 생성하기.
// #1
// 프로그램의 기본 구성
// 데어터+기능
// 데이터 = 프로그램상에서 유지하고 관리해야할 대상.
// 기능 = 데이터를 처리하고 조작하는 기능
// 클래스 = 데이터와 기능을 묶어줌

// C언어는 대표적인 절차지향적 언어.

// 클래스의 정의
// 객체를 정의해 놓은 것. 하나의 틀!

// 객체의 정의
// 실제로 존재하는 것. 사물, 또는 개념

// 객제의 용도
// 객체의 속성과 기능에 따라 다르다...

// 클래스 = 붕어빵 틀
// 팥, 밀가루 = 객체

//#2
//예금 계좌
class BankAccount
{

//데이터, 기능
int balance;

//입금
void deposit(int amount)
{
balance += amount;
}

int withdraw(int amount)
{
balance -=amount;
return balance;
}

//예금 조회
void check()
{
System.out.println("잔액 : "+balance+"원");
}


}



public class ClassFile1
{

public static void main(String[] args)
{
//#3
System.out.println("#3");
//객체, 인스턴스 (제품)을 만들자
BankAccount n1 = new BankAccount();
//BankAc n1 : 생성된 객체의 주소값을 저장해주는 변수.
//new : 비어있는 객체를 메모리공간에 할당해 주겠다.
//메모리 공간에 변수, 함수들이 생긴다.

//n1. 을 통해 객체 내부에 접근할 수 있다.
n1.balance = 100000;
n1.check();
n1.deposit(100);
n1.withdraw(10000);



System.out.println();
//#5
System.out.println("#5");
//붕어빵 제품 만들기
//팥과 슈크림 붕어빵 만들기.
//틀은 BoongUhBBang2에서 만듦.
BoongUhBBang2 n2 = new BoongUhBBang2();
n2.name = "팥 붕어빵";
n2.prices = 1000;
n2.eat();
System.out.println(n2.name+" 먹는데 금액 : "+n2.prices);

System.out.println();
BoongUhBBang2 n3 = new BoongUhBBang2();
n3.name = "슈크림 붕어빵";
n3.prices = 1500;
n3.eat();
System.out.println(n3.name+" 먹는데 금액 : "+n3.prices);

System.out.println();
//#7
System.out.println("#7");
//자동차 생산하기

//#8
//정보를 한번에 읽어오기.
//System.out.println();로 하나하나 읽기 귀찮을 때!
//toString 이용하기.

Car3 v = new Car3();
//객체 변수
v.brandName = "벤츠";
v.carColor = "하얀색";
v.price = 5000;
System.out.println(v.toString());

System.out.println();
Car3 b = new Car3();
b.brandName = "BMW";
b.carColor = "검은색";
b.price = 4000;
System.out.println(b);
//toString 치는게 귀찮으면 그냥 주소값만 쳐도 됨 ㅎ

System.out.println();
Car3 d = new Car3();
d.brandName = "아우디";
d.carColor = "은색";
d.price = 3000;
System.out.println(d.toString());

}


}


#2 - 붕어빵을 만들 class

public class BoongUhBBang2 
{
//#4
//붕어빵을 만드는 틀을 생성하자.
String name;
int prices;
void eat()
{
System.out.println(name+"을 먹는다!");
}

}

#3 - 자동차를 만들 틀(class) 만들기

public class Car3 
{
//#6
//자동차를 만드는 틀을 작성하자.
//자동차
//데이터 : 브랜드명, 색상, 가격
//기능 : 주행, 브레이크 작동, 속력 올리기.
//3개의 클래스를 만들자.
//벤츠  = 하얀색, 5000
//BMW = 검은색, 4000
//아우디 = 은색, 3000
//클래스 안에 포함 = 멤버
//멤버 변수  : 기본자료형, 참조변수 , static변수(클래스 변수)
String brandName;
String carColor;
int price;

//멤버 메서드
void drive()
{
System.out.println("주행을 시작합니다.");
}
void accel()
{
System.out.println("속력을 올립니다.");
}
void decel()
{
System.out.println("속력을 내립니다.");
}
//#8'
//정보를 출력해 줄 수 있는 메서드
//toString
//모든 클래스들은 오브젝트 클래스를 상속받는다.
/*
@Override
public String toString() 
{
return super.toString();
//super.toString()은 지워도 무방.
}
*/
//빈 공간에 오른쪽 클랙
//source >> Generate toString() >> 정보출력에 필요한 멤버변수 선택
@Override
public String toString() {
return "[brandName=" + brandName + ", carColor=" + carColor + ", price=" + price + "]";
}
}

#4 - 상속 motivator와 상속. 생성자 motivator
package game;
//#1
//상속

//#2
//motivator
/*
class Wizard1
{
//마법사 
int hp;
int mp;
String job;
void attack()
{
System.out.println("마법 공격!");
}
}

class Warrior
{
//전사
int hp;
int mp;
String job;
void attack()
{
System.out.println("검 공격!");
}
}

class Priest
{
//전사
int hp;
int mp;
String job;
void attack()
{
System.out.println("회복한다!");
}
}
*/

//클래스간에 중복이 너무 많네. 
//attack만 다르고 모두 같아!
//코드를 더 줄일 방법이 없을까?
//기본 캐릭터라는 틀을 하나 만들어 놓고 찍어내고,
//캐릭터의 특성만 따로 추가하자.
//>> 상속
//키워드 : extends
//extends 상속할클래스

//#3
//부모 클래스
class character
{
int hp;
int mp;
String job;
String name;
@Override
public String toString() {
return "[hp=" + hp + ", mp=" + mp + ", job=" + job + ", name=" + name + "]";
}


void attack()
{
System.out.println("공격!");
}
}

class Wizard /*상속받기*/ extends character
//자식 클래스
{
//마법사
void attack()
{
System.out.println("마법공격!");
}
}

class Warrior extends character
{
//전사
void attack()
{
System.out.println("검 공격!");
}
}

class Priest extends character
{
//힐러
void attack()
{
System.out.println("회복!");
}
}

public class DefaultCharacter4
{

public static void main(String[] args)
{
//#4
//객체 생성
Wizard i = new Wizard();
i.hp = 100;
i.mp = 200;
i.job = "마법사";
i.name = "설난이";
System.out.println(i);
//#5
//motivator
//빈 객체에 데이터를 하나하나 초기화하는거 너무 귀찮아.
//객체를 만들 때 데이터를 같이 초기화하고싶은데? 
//생성자 이용.
}

}



















#5 - 생성자 오버로딩. 메서드와 생성자의 차이점
package game;

//#1
//생성자 이용하기
//클래스 이름은 절대 중복을 허용하지 않는다.

class Animal
{
String name;
int age;
//생성자 메서드 : 생성자, 이름을 부르지 않아도 자동적으로 호출
//new 클래스명();

public Animal()
{
//#1
//기본 생성자 : 객체를 만들 때 자동적으로 이 메서드 호출한다.
//아무것도 쓰지 않으면 빈 객체.
//그러나 만약 기본생성자에 매개변수 인수를 주게 되면 
//데이터가 채워진 객체가 생성된다.
System.out.println("빈 객체생성");
//모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.

}
//#2
//생성자 오버로딩.
//객체를 만들 때 이름을 받아와서 그 이름대로 생성되도록 하자.
public Animal(/*#2*/ String name1)
{
name = name1;
System.out.println(name + " 객체생성");
}
//#3
//인수 두개를 받는 객체 만들기.
public Animal (String name1 , int age1)
{
name = name1;
age = age1;
System.out.println(name + ", " + age + "(살)");
}

//#4
//extends를 사용하여 java에서는 다중상속이 안된다.
class momdog extends Animal
{
}
class daddog extends Animal
{
}
//class childdog extends momdog,daddog
//불가능!
}

public class Animal5 
{

public static void main(String[] args) 
{
//#1'
//빈생성자 : 인스턴스 초기화 메서드
Animal a1 = new Animal();
//여기서 출력하면 자동적으로
//"객체생성"
//이라는 메세지가 뜬다.
System.out.println();
//#2'
//인수 1개 들어간 생성자.
System.out.println("#2'");
Animal a2 = new Animal("강아지");
Animal a3 = new Animal("고양이");
System.out.println();
//#3'
//인수 2개 들어간 생성자.
System.out.println("#3'");
Animal a4 = new Animal("강아지" , 3);
// #5
// 일반 메서드와 생성자의 차이점 : 리턴/출력값의 유무
}

}



















#6 - 생성자 실습하기1
package game;

//#1
//하나의 틀을 가지고 다양한 객체를 생성.
//다용성
//다용성의 기반은 상속~!
//exetends.

//#2
//멤버 변수를 적어도 하나를 갖고 있어야
//생성자 함수를 만들 수 있다.
//되도록 생성자를 만들고 싶으면 부모 클래스에다가 만들자.

class Person
//부모 클래스
{
String name; 
int age;
double hei;
String job;
void eat()
{
System.out.println("먹는다.");
}
void sleep()
{
System.out.println("잔다.");
}
void play()
{
System.out.println("논다.");
}
 
public Person()
{
name = "무명";
age = 0;
hei= 0.0;
job = "무직";
}
}

//어린이 생성
//("유치원에 다닌다")
class child extends Person
{

void attend()
{
System.out.println("유치원에 다닌다.");
}
}

//학생
//("수능공부를 한다.")
class student extends Person
{
void attend()
{
System.out.println("수능공부를 한다.");
}
}

//교수님
//("강의를 한다")
class proffessor extends Person
{
void lecture()
{
System.out.println("강의를 한다.");
}
}


public class Person6 
{

public static void main(String[] args) 
{
Person p1 = new Person();
child p2 = new child();
student p3 = new student();
proffessor p4 = new proffessor();
}

}

#7 - 생성자 실습하기2
package awt;
import java.awt.Button;
import java.awt.Color;

//자바 그래픽 지원 AWT

import java.awt.Frame;
import java.awt.Label;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

//#1
//윈도우창 생성하는 틀 만들기.
class MyFrame extends Frame
//Frame은 자바에서 지원해주는 그래픽 클래스
//import해주고 사용하자.
//api 참조문서를 참고해서 활용방법 보면 도움이 된다~! (f2)
{
public MyFrame()
{
//위도우 제목 표시하기.
setTitle("제목없는 윈도우");
//윈도으 창의 사이즈 지정하기. setSize(넓이 X 높이); (정수값)
setSize(300, 300);
//윈도우창을 보이게 하기.
setVisible(true);
//true : 창 보임
//false : 창 안보임.
//배경색 설정하기.
setBackground(Color.DARK_GRAY);
//글자표시 (라벨)
Label label1= new Label("ㅎㅎㅎGUI");
//import해서 사용하기.
//객체 생성.
//라벨을 윈도우창에 붙이기.
//add(부탁할 컴포넌트);
add(label1);
//버튼 부착
Button btn1 = new Button("btn1");
//import해서 사용하기.
//버튼을 윈도우창에 붙이기.
add(btn1);
//원래 콘솔에서 종결해야 창이 닫힌다.
//한번 x를 눌러서 탈출하도록 해보자.
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}

public class GUI_Test7 
{

public static void main(String[] args) 
{
//윈도우 창 띄우기.
new MyFrame();
}

}

#8 - class 과제


//실습하기
//#1
//클래스를 이용하여 다음을 만들어 보자.
//쇼핑몰 재고 관리 프로그램.
//상품 수량이 증가하면 재고수량에 더하고.
//감소하면 재고수량에서 뺀다.

//쇼핑몰 속성 : 재고수량 (stockNum), 초기값 : 0
//쇼핑몰 기능 : 재고수량 증가 : 10, 감소:5

//#2
//리모콘 만들기.
//리모콘 속성 : 음량, 전원 on/off, 
//리모콘 기능 : 전원을 켠다/끈다. 음량을 높인다/줄인다.

//TV 속성  : 채널
//TV 기능  : 채널을 돌린다.

//라디오 속성 : 채널
//라디오 기능 : 오디오 채널을 돌린다.


//#1
class ShoppingMall
{
int stockNum = 0;
void instock()
{
System.out.println("재고를 10 더합니다.");
stockNum += 10;
}
void outstock()
{
System.out.println("재고를 5 뺍니다.");
stockNum -= 5;
}
void nowstock()
{
System.out.println("현재 재고량은 "+stockNum+" 입니다.");
}

}
//#2
class Remote
{
int volume = 5;
boolean power = false;
String powerStatus = "Off";
int channel = 0;
void volumeup()
{
System.out.println("음량을 1 올립니다.");
volume += 1;
}
void volumedown()
{
System.out.println("음량을 1 낮춥니다.");
volume -= 1;
}
void nowvolume()
{
System.out.println("현재 음량은 "+volume+" 입니다.")
;
}
void poweron()
{
power = true;
System.out.println("전원을 킵니다.");
}
void poweroff()
{
power = false;
System.out.println("전원을 끕니다.");
}
void nowpower()
{
if (power == true)
powerStatus = "On";
else
powerStatus = "Off";
System.out.println("현재 전원은 "+powerStatus+" 입니다.");
}
}

class TVRemote extends Remote
{
void channelUp()
{
System.out.println("채널을 1 올립니다.");
channel += 1;
}
void channelDown()
{
System.out.println("채널을 1 낮춥니다.");
channel -= 1;
}
void nowChannel()
{
System.out.println("현재 채널은 "+channel+" 입니다.");
}
}

class RadioRemote extends Remote
{
void channelUp()
{
System.out.println("오디오 채널을 1 올립니다.");
channel += 1;
}
void channelDown()
{
System.out.println("오디오 채널을 1 낮춥니다.");
channel -= 1;
}
void nowChannel()
{
System.out.println("현재 오디오 채널은 "+channel+" 입니다.");
}
}
public class Project8 {

public static void main(String[] args) {
//#1
System.out.println("#1");
ShoppingMall sm = new ShoppingMall();
sm.nowstock();
sm.instock();
sm.outstock();
sm.nowstock();
System.out.println();
//#2
System.out.println("#2");
TVRemote tr = new TVRemote();
tr.nowpower();
tr.poweron();
tr.nowpower();
tr.nowvolume();
tr.volumeup();
tr.volumedown();
tr.nowvolume();
tr.nowChannel();
tr.channelUp();
tr.channelDown();
tr.nowChannel();
tr.poweroff();
tr.nowpower();
}

}


댓글

이 블로그의 인기 게시물

11 - Scanf

JAVA - Day3 - Scanner, if, if else

JAVA - Day5 - Array,Random