일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준고양이
- 화이자백신후기
- 화이자1일차
- 백준10718자바
- 자바공부
- 2739자바
- 자바화면구현
- 자바
- 자바컨테이너
- 1일1로그
- GUI
- 코로나백신
- java
- 백준 #백준알고리즘 #백준 Hello World #Hello World
- 백준구구단
- 백준고양이자바
- 자바수업
- cs지식
- 자바컴포넌트
- 자바조건문
- 화이자미열
- 화이자접종후기
- 백준2739
- 백준10171
- 백준자바 #백준10718
- 자바이벤트
- 스터디
- 자바토글버튼
- 포장방스터디
- 컴퓨터공부
- Today
- Total
Salted Caramel
[수업 9일차] 21.08.12, 객체배열, 캡슐화 본문
- 06_Class & Method-Ex09_Drink
1.
package Class;
//객체 배열 , ....동일한 데이터의 자료형을 여러개 확보하는 것(배열)
// 음료자판기
// 음료 4개 - 콜라, 사이다, 환타, 마운틴듀
public class Drink {
//멤버변수
String name; //음료 이름
int price; //음료 가격
public Drink() { } //기본 생성자
// 인자 생성자 (기본생성자로 저장하거나 인자생성자로 저장하는 두가지 방법이 있다)
public Drink(String n, int p) {
name = n; //(n 매개변수)
price = p;
}
}
2.
package Class;
import java.util.Scanner;
public class Ex09_Drink {
public static void main(String[] args) {
//(음료와 가격 이름을 키보드로 입력 받기)
Scanner sc = new Scanner(System.in);
System.out.print("자판기 음료 갯수를 입력하세요. : "); //( 출력문 작성)
// 객체 배열을 만들어 보자.
Drink[] drinks = new Drink[sc.nextInt()]; //(4개의 메모리 공간이 만들어짐)
//(여기에다가 음료 이름과 가격까지 만들어줘야함)
//drinks[0] = new Drink("콜라", 2000);
//drinks[1] = new Drink("사이다", 2000);
//drinks[2] = new Drink("환타", 2300);
//drinks[3] = new Drink("마운틴듀", 2500);
for(int i = 0; i<drinks.length; i++) {
System.out.println("음료 이름과 가격을 입력하세요.....");
System.out.println("=====================");
drinks[i] = new Drink(sc.next(), sc.nextInt()); //(이름, 숫자)
}
//(객체배열)
System.out.println(drinks[0]);
System.out.println(drinks[1]);
System.out.println(drinks[2]);
System.out.println(drinks[3]);
System.out.println();
System.out.print("돈을 입력해 주세요. :");
int coin = sc.nextInt();
// 입력을 받은 coin과 객체 배열에 저장된 Drink 클래스의 멤버변수인
//price 가격을 비교해서 coin보다 금액이 작거나 같은 음료를 선택
for(int i=0; i<drinks.length; i++) { //(내가 입력한 가격(입력한 coin보다)보다 작거나 같으면 화면에 표시)
if(coin == drinks[i].price) {//drinks[i](참조주소값) 거기를 타고 들어가면 음료 이름과 가격이 있음 거기에 점을 하고 price하면 가격이 들어있음
System.out.print(drinks[i].name + "\t");
}
}
}
}
객체 배열은 타고 들어가야지 그 안에 주소값이 ㅣㅇㅆ고....
시작 주소값에
drinks[i]. <=참조주소값에 접근을 한다.
따로따로 되어 잇는 객체를 배열로 묶어버림 drink라는 클래스 타입의 배열이라는 것이다.
각각의 생성이 되는 놈을 배열에다가 넣으면 문제가 되서 drink1, drink2.. 라는 참조 주소값을 따라가면 그제서야 객체가 만들어지는데 거기는 이름과 가격 객체가 있음. 그 객체를 처리해 주면 된다.
- 06_Class & Method-Ex10_Book
1.
package Class;
public class Book { //(객체 배열을 만듬)
// 멤버변수
String title; // 책 제목
String author; // 책 저자
String price; // 책 가격
public Book() { } //기본 생성자
public Book(String t, String a, String p) {
title = t;
author = a;
price = p;
} //인자 생성자
}
2.
package Class;
import java.util.Scanner;
public class Ex10_Book {
public static void main(String[] args) {
//(키보드 입력 받기)
Scanner sc = new Scanner(System.in);
System.out.print("몇 권의 책을 입력하나요? : ");
Book[] books = new Book[sc.nextInt()];
for(int i=0; i<books.length; i++) {
System.out.println
((i+1) + "번째 책 제목, 책 저자, 책 가격을 입력하세요....");
books[i] =
new Book(sc.next(),sc.next(),sc.next()); //(next메서드는 중간에 공백(spacebar)이 있으면 인식을 못함)
}//한 줄단위로 입력 받는것을 넥스트라인 //(입력받으면 객체에할당되어서 배열에 들어가게 됨)
System.out.println();
for(int i=0; i<books.length; i++) {
System.out.println
("<" + books[i].title+", "+books[i].author+", "
+books[i].price+"원>");
}
sc.close();
}
}
- 06_Class & Method-PigSave
return 메서드 : 현재 실행되고 있는 메서드를 종료시키는 명령어. 이 문장을 만나게 되면 아래 있는 실행되는 문장이 실행이 안되고 종료 시켜준다.
인자 생성자를 만들면 기본 생성자가 없어져서 찾지를 못한다. 그래서 기본 생성자를 만들어줘야지 오류가 생기지 않음, 인자 생성자로 개체를 생성할 수도 있고 기본생성자로 객체를 생성할 수도 있음
package Class;
public class PigSave { //돼지 저금통
//멤버변수
int balance; //돼지 저금통 잔액
public PigSave() { } //기본 생성자....그래야자 나중에 오류가 생기지않음,,기본생성잘를 만드는 이유
public PigSave(int b) { //인자 생성자
balance = b;
}
// 입금을 하는 메서드
public void deposit(int money) {
System.out.println("돼지 저금통에 입금을 합니다....");
balance = balance + money;
System.out.println("현재 잔액 >>> " +balance +"원");
}
// 출금을 하는 메서드
public void withdraw(int money) {
if(money > balance) {
System.out.println("잔액이 부족합니다.....");
return; //현재 실행되고 있는 메서드를 종료시키는 명령어.
}
System.out.println("돼지 저금통에 출금을 합니다....");
balance = balance - money;
System.out.println("현재 잔액 >>> " +balance +"원");
}
}
package Class;
public class Ex11_PigSave {
public static void main(String[] args) {
//돼지 저금통 객체 생성
PigSave save = new PigSave(0); //(인자생성자)
//PigSave pig = new PigSave();
//(기본생성자 호출...인자생성자를 먼저 호출했ㄱ기때문에 기본생성자를 찾지를 못함...그래서 앞에서 기본생성자를 생성해야지 오류가 생기지 않음)
//pig.balance = 0;
save.deposit(3000); //입금메서드 호출
save.deposit(5000); //입금메서드 호출
save.withdraw(2000); //출금메서드 호출
save.withdraw(10000); //출금메서드 호출....(잔액이 부족합니다)
//save.balance = 10000; //이렇게 접근을 하면 안됨. (맴버에 직접적으로 접근하면 안됨..)
//(객체지향의 사대 특징 중에 하나)
}
}
- 06_Class & Method-PigSave
데이터를 보호할 목적으로 접근을 제어하는것
직접적으로 접근하는 것을 못하게 하는 것, 외부의 접근을 제한하는 것
ex) 은행의 프로그램에 직접적으로 접근
외부에 데이터를 제공할 때는 private 데이터로 줘야한다.
setter( ) =>멤버변수에 초기값을 할당하는 변수
or 인자생성자를 이용해서 멤버변수의 초기값을 할당
getter( ) => 초기값을 할당한 초기값을 사용하고자 할때
* ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
* 캡슐화(Encapsulation)?
* - 객체지향 프로그램 4대 특징 중 하나.
* - 데이터를 감추기, 데이터를 외부에서 함부로 변경하지
* 못하도록 외부의 접근을 제한하는 것을 말함.
* - 정보 은닉 : 클래스 멤버 접근 제어 기법.
* * private : 외부에서 직접 접근 차단. //(보완이 확실)
* * public : 모든 클래스에서 접근 가능. //(해킹이 가능하다)
* - setter()/ getter() 메서드로 접근 가능.
* ==> setter():지정자 메서드.
* ==> getter() :획득자 메서드.
*/
* this : 객체(Number 클래스) 자기 자신을 의미함. //(현재 주소값, 객체 자기자신)
* - 주로 멤버변수와 메서드 또는 생성자의 매개변수 이름이 동일할 때
* 객체의 멤버임을 명확하게 하기 위하여 사용되는 키워드.
* - 매개변수(지역변수)의 이름과 멤버변수(전역변수)의 이름이 같을 때
* 멤버변수(전역변수) 앞에 this 하는 키워드를 붙여서 구분할 때 사용함.
* - 지역변수와 전역변수의 이름이 같으면 지역변수의 우선순위가 높다.
*
*/
/*
* setter() 메서드로 멤버변수에 초기값을 설정.
* - private 멤버변수에 값을 지정(초기값 설정)하는 역할을 하는 메서드
* 형식)
* public void set멤버변수명(자료형 매개변수) {
* 멤버변수 = 매개변수
*
* }
* getter() 메서드로 멤버변수애 할당된 값을 가져오는 설정.
* - private 멤버변수에 할당된 값을 가져오는 역할을 하는 메서드.
* 형식)
* public 반환형 get 멤버변수명() {
* return 멤버변수명;
* }
*
package Class;
/*
* ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
* 캡슐화(Encapsulation)?
* - 객체지향 프로그램 4대 특징 중 하나.
* - 데이터를 감추기, 데이터를 외부에서 함부로 변경하지
* 못하도록 외부의 접근을 제한하는 것을 말함.
* - 정보 은닉 : 클래스 멤버 접근 제어 기법.
* * private : 외부에서 직접 접근 차단. //(보완이 확실)
* * public : 모든 클래스에서 접근 가능. //(해킹이 가능하다)
* - setter()/ getter() 메서드로 접근 가능.
* ==> setter():지정자 메서드.
* ==> getter() :획득자 메서드.
*/
public class Number {
//멤버변수
//private : 외부에서 직접 접근 차단
private int num1; //200
private int num2;
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2; //(this: number라는 객체의 참조변수)
}
/*
* this : 객체(Number 클래스) 자기 자신을 의미함. //(현재 주소값, 객체 자기자신)
* - 주로 멤버변수와 메서드 또는 생성자의 매개변수 이름이 동일할 때
* 객체의 멤버임을 명확하게 하기 위하여 사용되는 키워드.
* - 매개변수(지역변수)의 이름과 멤버변수(전역변수)의 이름이 같을 때
* 멤버변수(전역변수) 앞에 this 하는 키워드를 붙여서 구분할 때 사용함.
* - 지역변수와 전역변수의 이름이 같으면 지역변수의 우선순위가 높다.
*
*/
/*
* setter() 메서드로 멤버변수에 초기값을 설정.
* - private 멤버변수에 값을 지정(초기값 설정)하는 역할을 하는 메서드
* 형식)
* public void set멤버변수명(자료형 매개변수) {
* 멤버변수 = 매개변수
*
* }
*/
//public void setNum1(int n1) {
//num1 = n1;
//}
//public void setNum2(int n2) {
// num1 = n2;
//}
/*
* getter() 메서드로 멤버변수애 할당된 값을 가져오는 설정.
* - private 멤버변수에 할당된 값을 가져오는 역할을 하는 메서드.
* 형식)
* public 반환형 get 멤버변수명() {
* return 멤버변수명;
* }
*
*/
//public int getNum1() {
// return num1;
//}
//public int getNum2() {
// return num2;
//}
}
private int num1;
private int num2;
을 줬기 때문에 보이지 않음...데이터를 보호하기 위한 목적으로
겟넘원 호출 넘워1 리턴해주래
어떻게 할당이 되고 초기값 할당된 것을 어떻게 가지고 오는지 .
자바는 코드상에서 해킹을 막아주는데,
public void- package가 달라도 접근이 가능
그냥 void로 작성- package가 다르면 접근(x)
'coding > [2021.08.02~2022.01.24] 수업복습' 카테고리의 다른 글
[수업 11일차] 21.08.17 추상클래스, 인터페이스 (0) | 2021.08.17 |
---|---|
[수업 10일차] 21.08.13 상속(inheritance), 메서드 재정의(Method overloading) Exam 문제 풀이 (다시) (0) | 2021.08.14 |
[수업 8일차] 21.08.11, 객체(Object), 클래스(Class) (0) | 2021.08.11 |
[수업 7일차] 21.08.10, method, call-by-value ,call-by-reference , 실인수, 가인수 (0) | 2021.08.11 |
[수업 6일차] 21.08.09, Exam01, Exam02, Exam03, method (0) | 2021.08.10 |