
getter 메서드
setter 메서드
package ch03_getter_setter;
class Member{
private String id;
private String name;
private int age;
public String getId(){
return id;
}
public void setId(String _id) {
id = _id;
}
public String getName(){
return name;
}
public void setName(String _name) {
if(_name.length()<=10) {
name = _name;
} else {
System.out.println("이름은 10글자 까지만 가능");
}
}
public int getAge(){
return age;
}
public void setAge(int _age) {
if(_age>=0 && _age <= 130) {
age = _age;
} else {
System.out.println("나이는 0 ~ 130 사이만 가능");
}
}
public void info() {
System.out.println("--- 회 원 정 보 ---");
System.out.println("ID : " + id);
System.out.println("이름 : " + name);
System.out.println("나이 : " + age + " 세");
}
}
public class ExgGetterSetter {
public static void main(String[] args) {
Member manA = new Member();
// manA.id = "001";
// manA.name = "manA";
// manA.age = 20;
manA.setId("001");
manA.setName("sdfDASGVHASDVGHGJ");
manA.setName("manA");
manA.setAge(-20);
manA.setAge(28);
manA.info();
// getter 쓰는 이유 : 개별적으로 써야할 경우가 있어서 (따로 불러오기)
System.out.println("회원 ID : " + manA.getId());
System.out.println("회원 이름 : " + manA.getName());
System.out.println("회원 나이 : " + manA.getAge() + " 세");
}
}
이름은 10글자 까지만 가능
나이는 0 ~ 130 사이만 가능
--- 회 원 정 보 ---
ID : 001
이름 : manA
나이 : 28 세
회원 ID : 001
회원 이름 : manA
회원 나이 : 28 세
Book class 를 정의하고, BookManager class 에서 테스트 하세요
package ch03_getter_setter;
public class Book {
private String title; // 책제목
private String author; // 지은이
private char area; // 진열위치
private int price; // 가격
public void info() {
System.out.println("- 도 서 정 보 -");
System.out.println("책제목 : " + title);
System.out.println("지은이 : " + author);
System.out.println("진열위치 : " + area);
System.out.println("책가격 : " + price);
}
public String getTitle() {
return title;
}
public void setTitle(String _title) {
title = _title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String _author) {
if(_author.length()>=2&&_author.length()<=10) {
author = _author;
} else {
System.out.println("지은이 2 ~ 10글자 ㅇㅋ?");
}
}
public char getArea() {
return area;
}
public void setArea(char _area) {
if(_area >='A' && _area<='C') {
area = _area;
} else {
System.out.println("진열위치 A, B, C만 ㅇㅋ?");
}
}
public int getPrice() {
return price;
}
public void setPrice(int _price) {
if(_price>0) {
price = _price;
} else {
System.out.println("가격 양수만 ㅇㅋ?");
}
}
}
package ch03_getter_setter;
public class BookManager {
public static void main(String[] args) {
Book b1 = new Book();
b1.setTitle("토지");
b1.setAuthor("sfadfsdaasdfhg");
b1.setAuthor("박경리");
b1.setArea('d');
b1.setArea('A');
b1.setPrice(-22000);
b1.setPrice(22000);
b1.info();
}
}
지은이 2 ~ 10글자 ㅇㅋ?
진열위치 A, B, C만 ㅇㅋ?
가격 양수만 ㅇㅋ?
- 도 서 정 보 -
책제목 : 토지
지은이 : 박경리
진열위치 : A
책가격 : 22000
주의사항
- 생성자를 하나라도 정의하면 기본생성자(default) 가 자동으로 생성자가 만들어지지 않음
- 생성자의 이름은 무조건 클래스의 이름과 같아야 함
package ch04_constructor;
public class Member {
private String id;
private String name;
private int age;
//생성자
public Member() {
System.out.println("- Member() -");
id = null;
name = null;
age = 0;
}
// 생성자 Overloading // 메서드 이름은 같지만 매개변수가 다름
public Member(String _id, String _name, int _age) {
System.out.println("- Member(String _id, String _name, int _age) -");
id = _id;
name = _name;
age = _age;
}
public String getId() {
return id;
}
public void setId(String _id) {
id = _id;
}
public String getName() {
return name;
}
public void setName(String _name) {
if (_name.length() <= 10) {
name = _name;
} else {
System.out.println("이름은 10글자 까지만 가능");
}
}
public int getAge() {
return age;
}
public void setAge(int _age) {
if (_age >= 0 && _age <= 130) {
age = _age;
} else {
System.out.println("나이는 0 ~ 130 사이만 가능");
}
}
public void info() {
System.out.println("--- 회 원 정 보 ---");
System.out.println("ID : " + id);
System.out.println("이름 : " + name);
System.out.println("나이 : " + age + " 세");
}
}
어떠한 클래스로부터 객체를 만들 때 해당 클레스 안에 생성자가 실행
생성자 : 클래스와 동일한 이름을 가진 메서드(필수)
객체를 생성하기 위해선 생성자가 작동됨
작성하지 않으면 아무런 내용도 가지지 않는 default 생성자가 작동됨
생성자란 객체에 있는 멤버필드를 초기화 하는 것
package ch04_constructor;
public class MemberManager {
public static void main(String[] args) {
Member manA = new Member(); // () 는 생설자를 호출하는 것임
// 나오는 이유 >> 생성자가 기본생성자를 초기화해서 출력됨
manA.info();
Member manB = new Member("asd", "asdasd", 123);
manB.info();
}
}

- Member() -
--- 회 원 정 보 ---
ID : null
이름 : null
나이 : 0 세
- Member(String _id, String _name, int _age) -
--- 회 원 정 보 ---
ID : 002
이름 : asdasd
나이 : 123 세
Book class 를 정의하고, BookManager class 에서 테스트 하세요
package ch04_constructor;
public class Book {
private String title; // 책제목
private String author; // 지은이
private char area; // 진열위치
private int price; // 가격
public Book() {
System.out.println("- Book -");
}
public Book(String _title, String _author) {
title = "none";
author = "미상";
area = '-';
price =0;
}
public Book(String _title, String _author, char _area, int _price) {
System.out.println("- Book(String title, String author, char area, int price) -");
title = _title;
author = _author;
area = _area;
price = _area;
}
public void info() {
System.out.println("- 도 서 정 보 -");
System.out.println("책제목 : " + title);
System.out.println("지은이 : " + author);
System.out.println("진열위치 : " + area);
System.out.println("책가격 : " + price);
}
public String getTitle() {
return title;
}
public void setTitle(String _title) {
title = _title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String _author) {
if(_author.length()>=2&&_author.length()<=10) {
author = _author;
} else {
System.out.println("지은이 2 ~ 10글자 ㅇㅋ?");
}
}
public char getArea() {
return area;
}
public void setArea(char _area) {
if(_area >='A' && _area<='C') {
area = _area;
} else {
System.out.println("진열위치 A, B, C만 ㅇㅋ?");
}
}
public int getPrice() {
return price;
}
public void setPrice(int _price) {
if(_price>0) {
price = _price;
} else {
System.out.println("가격 양수만 ㅇㅋ?");
}
}
}
package ch04_constructor;
public class BookManager {
public static void main(String[] args) {
Book b1 = new Book();
b1.info();
b1.setTitle("토지");
b1.setAuthor("sfadfsdaasdfhg");
b1.setAuthor("박경리");
b1.setArea('d');
b1.setArea('A');
b1.setPrice(-22000);
b1.setPrice(22000);
b1.info();
Book b2 = new Book("토지2", "ㅁㄴㅇㄻㄴㅇㄻㄴㅇㄹ", 'A', 123124215);
b2.info();
Book b3 = new Book("토지2", "ㅁㄴㅇㄻㄴㅇㄻㄴㅇㄹ");
b3.info();
}
}
- Book -
- 도 서 정 보 -
책제목 : null
지은이 : null
진열위치 :
지은이 2 ~ 10글자 ㅇㅋ?
진열위치 A, B, C만 ㅇㅋ?
가격 양수만 ㅇㅋ?
- 도 서 정 보 -
책제목 : 토지
지은이 : 박경리
진열위치 : A
책가격 : 22000
- Book(String title, String author, char area, int price) -
- 도 서 정 보 -
책제목 : 토지2
지은이 : ㅁㄴㅇㄻㄴㅇㄻㄴㅇㄹ
진열위치 : A
책가격 : 65
- 도 서 정 보 -
책제목 : none
지은이 : 미상
진열위치 : -
책가격 : 0
class 안에 instance 멤버를 가리키는 참조 변수
this()
생성자에서 'this()' 를 이용하여 다른 생성자를 호출할 수 있다
생성자의 첫번째 라인에서만 사용 가능
package ch05_this;
public class Member {
private String id;
private String name;
private int age;
public Member() {
System.out.println("- Member() -");
id = "none";
name = "none";
age = 0;
}
public Member(String id) {
this(); // 이것을 사용하면 아래의 //처리한 코드를 굳이 쓸 필요가 없음
// () 안에 매개변수를 쓰고 사용해도 됨
// this(id, "none", 0);
// 주의사항 : 생성자의 첫번째 라인에서만 가능
System.out.println("- Member(String id) -");
this.id = id;
// this.name ="none"; // 굳이 넣을 필요 없음
// this.age = 0;
}
// this는 클래스 안의 멤버를 뜻
public Member(String id, String name, int age) {
System.out.println("- Member(String _id, String _name, int _age) -");
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
if (name.length() <= 10) {
this.name = name;
} else {
System.out.println("이름은 10글자 까지만 가능");
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0 && age <= 130) {
this.age = age;
} else {
System.out.println("나이는 0 ~ 130 사이만 가능");
}
}
public void info() {
System.out.println("--- 회 원 정 보 ---");
System.out.println("ID : " + id);
System.out.println("이름 : " + name);
System.out.println("나이 : " + age + " 세");
}
}
package ch05_this;
public class MemberManager {
public static void main(String[] args) {
Member manA = new Member();
manA.info();
Member manB = new Member("002", "asdasd", 20);
manB.info();
Member manC = new Member("003");
manC.info();
}
}
- Member() -
--- 회 원 정 보 ---
ID : none
이름 : none
나이 : 0 세
- Member(String _id, String _name, int _age) -
--- 회 원 정 보 ---
ID : 002
이름 : asdasd
나이 : 20 세
- Member() -
- Member(String id) -
--- 회 원 정 보 ---
ID : 003
이름 : none
나이 : 0 세
신발 정보를 가지는 Shoes class 를 정의하고, ShoesManager class 에서 테스트 하세요
- 제조회사, 모델명, 사이즈, 가격의 관리가 가능합니다
- 생성자 2개 이상, getter, setter 가 있어야 합니다
- 사이즈 : 200 ~ 300 mm 만 가능합니다
- 가격 : -(minus) 값은 사용할 수 없습니다
package ch06_quiz;
public class Shoes {
private String company;
private String model;
private int size;
private int price;
public Shoes() {
company = "none";
model = "none";
size = 0;
price = 0;
}
public Shoes(String company, String model) {
this(company, model,0,0);
}
public Shoes(String company, String model, int size, int price) {
this.company = company;
this.model = model;
if(size>=200 && size <=300) {
this.size = size;
} else System.out.println("200 ~ 300 mm 사이즈만 가능");
if(price>=0) {
this.price = price;
} else System.out.println("0이상만 가능");
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getSize() {
return size;
}
public void setSize(int size) {
if(size>=200 && size <=300) {
this.size = size;
} else System.out.println("200 ~ 300 mm 사이즈만 가능");
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
if(price>=0) {
this.price = price;
} else System.out.println("0이상만 가능");
}
public void info() {
System.out.println("--- 신 발 정 보 ---");
System.out.println("제조회사 : " + company);
System.out.println("모델명 : " + model);
System.out.println("사이즈 : " + size + " mm");
System.out.println("가격 : " + price + " 원");
}
}
package ch06_quiz;
public class ShoesManager {
public static void main(String[] args) {
Shoes s1 = new Shoes();
s1.setCompany("아디다스");
s1.setModel("ABC");
s1.setSize(210);
s1.setPrice(-2000);
s1.info();
Shoes s2 = new Shoes("나이키", "에어포스");
s2.info();
Shoes s3 = new Shoes("뉴발", "GHI", 250, 30000);
s3.info();
Shoes s4 = new Shoes("잘못입력", "ㅁㄴㅇㄹ", 310, -20000);
s4.info();
}
}
0이상만 가능
--- 신 발 정 보 ---
제조회사 : 아디다스
모델명 : ABC
사이즈 : 210 mm
가격 : 0 원
200 ~ 300 mm 사이즈만 가능
--- 신 발 정 보 ---
제조회사 : 나이키
모델명 : 에어포스
사이즈 : 0 mm
가격 : 0 원
--- 신 발 정 보 ---
제조회사 : 뉴발
모델명 : GHI
사이즈 : 250 mm
가격 : 30000 원
200 ~ 300 mm 사이즈만 가능
0이상만 가능
--- 신 발 정 보 ---
제조회사 : 잘못입력
모델명 : ㅁㄴㅇㄹ
사이즈 : 0 mm
가격 : 0 원
package ch07_accessA;
public class First {
public int pubData;
protected int proData;
int defData;
private int priData;
void defaultMethod() {}
public void publicMethod() {}
}
package ch07_accessA;
class Second {
public int pubData;
protected int proData;
int defData;
private int priData;
void defaultMethod() {}
public void publicMethod() {}
}
접근 제한자
- public : 모든 class 에서 접근이 가능
- protected : 같은 package, 상속받은 하위 class 에서 접근 가능
- default : 같은 package 내에서만 접근 가능
- private : class 안에서만 접근 가능, 외부에서는 접근 불가
| class 내부 | 같은 package | 하위 class | 다른 package | |
|---|---|---|---|---|
| public | O | O | O | O |
| protected | O | O | O | X |
| default | O | O | X | X |
| private | O | X | X | X |
package ch07_accessA;
public class AreaOne {
public static void main(String[] args) {
First firstA = new First();
firstA.pubData=1;
firstA.proData=2;
firstA.defData=3;
// firstA.priData=4; Error
firstA.defaultMethod();
firstA.publicMethod();
Second secondA = new Second();
secondA.pubData=1;
secondA.proData=2;
secondA.defData=3;
// secondA.priData=4; Error
secondA.defaultMethod();
secondA.publicMethod();
}
}
package ch07_accessB;
import ch07_accessA.First;
public class AreaTwo {
public static void main(String[] args) {
// 다른 package에 있는 class 를 사용하려면 import 해야함 / ctrl + shift + o
// 다른 package는 public 선언된 것만 가능
First firstB = new First();
firstB.pubData = 1;
// firstB.proData = 2;
// firstB.defData = 3;
// firstB.priData = 4;
// firstB.defaultMethod();
firstB.publicMethod();
// class 자체가 public 이 아니기 때문에 다른 패키지에선 사용 불가
// import 도 안됨
// Second secondB = new Second();
}
}
static
- static 영역을 따로 잡을 수 있음
- 가장 먼저 작동, 로드되는 순간 딱 1번
- 생성자보다 먼저
- static 멤버에 대한 초기화가 이루어짐
- instance 멤버는 사용 불가
package ch08_static;
public class ExStatic {
public static int staValue; // 다같이 씀
private int priValue;
static {
System.out.println("- static area -");
staValue =0;
// priValue =0; Error <- 이유 : 객체가 생성되기 전 / 생성자가 아직 만들어지지 않음
}
public ExStatic() {
++ staValue; // static 이 선언되면 비스듬해짐
++ priValue;
System.out.println("staValue : " + staValue + " - priValue : " + priValue);
}
public static void staticMethod() {
System.out.println("- staticMethod() -");
System.out.println("staValue : " + staValue);
// System.out.println("priValue : " + priValue); Error
int a = 0;
}
public void info() {
System.out.println("staValue : " + staValue);
System.out.println("priValue : " + priValue);
}
}
static
package ch08_static;
public class StaticTest {
public static void main(String[] args) {
// 객체와 상관없이 사용 할 수 있음
// 객체 생성 없이 사용 가능
ExStatic.staValue = 0;
ExStatic.staticMethod();
ExStatic esA = new ExStatic();
ExStatic esB = new ExStatic();
ExStatic.staValue =7; //객체 생성없이 바로 불러와서 사용 가능
esA.staValue = 10; // static은 공용이기 때문에 하나를 바꾸면 같이 바뀜
esB.staValue = 5;
esA.info();
esB.info();
// 출력 시 마지막 esB.staValue =5; 를 마지막으로 값이 변한걸 확인가능
}
}
- static area -
- staticMethod() -
staValue : 0
staValue : 1 - priValue : 1
staValue : 2 - priValue : 1
staValue : 5
priValue : 1
staValue : 5
priValue : 1
final
package ch09_final;
public class FinalTest {
public static void main(String[] args) {
final double PI;
PI = 3.141592;
// PI = 3.14; Error // 위에서 이미 설정했기 때문에 수정 불가
final int TEN = 10;
}
}
선언 시 반드시 초기화를 해야 함
package ch09_final;
public class ExFinal {
// 생성자에서 초기화 / 반드시 해야함
private final int A;
public ExFinal() {
A = 1;
}
public ExFinal(int a) {
A = a;
}
// 멤버필드에서 선언과 동시에 초기화
private final int B = 2;
// static final 을 사용하려면
// static area에서 먼저 초기화
private static final int C;
// static 영역
static {
C = 0;
}
// 선언과 동시에 초기화
private static final int D = 4;
}
- 하나의 은행 상품을 관리하는 BankBook class 를 정의
- BankBookManager class 에서 테스트
- 이율 : 한번의 설정으로 모든 계좌의 이율 변경 가능
- 계좌번호 : 한번 설정 후 변경 불가
- 고객명, 잔액
기능
- 입/출금, 통장 정보 확인, 이율 확인/변경 가능
package ch10_quiz;
public class BankBook {
private static double rate; // 이율
private final String account; // 계좌번호
private String name; // 고객명
private int balance; // 잔액
static { rate = 2; } // static 영역 따로 설정 가능 -> rate 설정
public BankBook(String account, String name, int balance) {
this.account = account;
this.name = name;
this.balance = balance;
}
public BankBook(String account, String name) {
this(account, name, 0); // 계좌번호와 이름만 입력했을 때 잔액은 0원으로 설정되도록 함
}
// 입금
public void deposit(int money) {
if(money > 0) {
this.balance += money;
System.out.println("입금액 : " + money + " 원");
System.out.println("잔 액 : " + balance + " 원");
} else {
System.out.println("입금액 오류~");
}
}
// 출금
public void withdraw(int money) {
if(money > 0 && money <= this.balance) {
this.balance -= money;
System.out.println("출금액 : " + money + " 원");
System.out.println("잔 액 : " + balance + " 원");
} else {
System.out.println("출금액 오류~");
}
}
// 계좌 정보
public void info() {
System.out.println("--- 계 좌 정 보 ---");
System.out.println("계좌번호 : " + account);
System.out.println("고객명 : " + name);
System.out.println("잔액 : " + balance + " 원");
System.out.println("현재이율 : " + rate + " %");
}
// 이율 확인
public static void currentRate() {
System.out.println("현재 이율 : " + rate + " %");
}
// 이율 변경
// 해당 메서드로 rate를 변경하면 static 이 선언되었으므로
// Manager class에서 info() method 사용시 모든 rate가 수정되어 출력됨
public static void changeRate(double change) {
if(change > 0) {
rate = change;
System.out.println("변경 이율 : " + rate + " %");
}
}
}
package ch10_quiz;
public class BankBookManager {
public static void main(String[] args) {
BankBook manA = new BankBook("000123-12-001", "manA");
manA.deposit(-20000);
manA.deposit(20000);
manA.info();
System.out.println();
BankBook manB = new BankBook("000123-12-002", "manB", 10000);
manB.info();
manB.withdraw(10001);
manB.withdraw(9999);
manB.info();
System.out.println();
manA.changeRate(2.3);
manA.info();
manB.info();
}
}
입금액 오류~
입금액 : 20000 원
잔 액 : 20000 원
--- 계 좌 정 보 ---
계좌번호 : 000123-12-001
고객명 : manA
잔액 : 20000 원
현재이율 : 2.0 %
--- 계 좌 정 보 ---
계좌번호 : 000123-12-002
고객명 : manB
잔액 : 10000 원
현재이율 : 2.0 %
출금액 오류~
출금액 : 9999 원
잔 액 : 1 원
--- 계 좌 정 보 ---
계좌번호 : 000123-12-002
고객명 : manB
잔액 : 1 원
현재이율 : 2.0 %
변경 이율 : 2.3 %
--- 계 좌 정 보 ---
계좌번호 : 000123-12-001
고객명 : manA
잔액 : 20000 원
현재이율 : 2.3 %
--- 계 좌 정 보 ---
계좌번호 : 000123-12-002
고객명 : manB
잔액 : 1 원
현재이율 : 2.3 %