초보자가 객체생성하는 법
- '눈에 보이는 특징 전부 작성 후, 정 필요 없으면 삭제'
클래스 다이어그램에서 static은 밑줄그어 표시
메소드를 만드는 경우 3가지
1. 중복일 때
2. 너무 길고 복잡할 때
3. 의미 단위로 행위를 분리할 때
선배 조언)
- 형상관리 연습 : git, svn으로 조별프로젝트하기
- 블로그 작성
- 영타 연습
- ★★★★★ 예제 코드 따라치기 ★★★★★
연산 전 초기값 잊지 말고 넣어주기
코드를 입력하세요
좀 비싼 어딘가? (신시하우스 맞은편?)
신시하우스 - 커피
만배아리랑 - 보쌈정식
합천 돼지국밥 - 순대국밥
청해수산직영점 - 회비빔밥
시장국수와돈가스 - 옛날돈가스
부영숯불구이
대모골
충무낙지
경부 가정식 뷔페
디자인 패턴의 하나로, '전체 시스템에서 단 하나의 객체만 유지해야 할 때' 사용한다.
class Single {
private static Single instance = new Single();
private Single(){}
public static Single getInstance(){
return instance;
}
}
public class SingleTest {
public static void main(String[] args){
Single obj1 = Single.getInstance();
Single obj2 = Single.getInstance();
System.out.println(obj1);
System.out.println(obj2);
}
}
- 디자인 패턴
“바퀴를 다시 발명하지 마라(Don’t reinvent the wheel)”
전문가들의 노하우를 모아놓은, 프로그래밍하면서 만날 수 있는 상황들에 대한 해답을 담은,
말하자면 '코드 설계의 문제 해결 패턴 모음'
참고- GoF (Gang of Four) : 디자인 패턴을 집대성한 4명. 그만큼 파급력이 커서 Gang이라고 부름.
- 지금은 공부해도 시간 낭비😵 5~6년차 되고나서 공부하기.
- '안티 패턴'이란 것도 존재함 (반면교사 모음)
- 공유되는 객체들의 조건
state-less : 멤버변수=유지되는 값x 메서드만 존재
= '이름 붙이기'
다양한 정보가 들어간 '코끼리(실체)'를 우리는 '코끼리(단어)'로 부르기로 했다.
추상화란 다양한 정보, 특징을 단순한 무언가에 담아 사용하는 것이다.
Car c;
Car c에서 c는 Car 객체의 주소를 가진다.
다시 말하면 우리는 다양한 값과 기능을 지닌 Car 객체를 'c'라는 이름 하나로 부르기로 한 것이다.
= '비가시화'로 외부로부터의 보호
① 보호 ② 묶음
외부에서 눈으로 확인할 수 X -> 외부에서 내부요소 인지X -> '조작 by 외부인' 원천 차단
나중에 함
/*
BankAccount
-----------
-balance : int
-----------
+BankAccount(balance : int)
+transfer(amount : int, b : BankAccount) : void
+getBalance() : int
+setBalance(int balance) : void
+toString() : String
*/
class BankAccount {
// 잔액 멤버변수
private int balance;
// BankAccount 생성자
public BankAccount(int balance){
setBalance(balance);
}
// getter, setter
public void setBalance(int balance){
this.balance = balance;
}
public int getBalance(){
return balance;
}
// transfer : 돈 받을 계좌 = ★Bankaccount객체 주소★와 금액 = amount 를 받아서 인출-입금을 진행하는 메서드
// 필요한 정보(=parameter)는 내 계좌 주소, 상대 계좌 주소, 보내려는 금액인데, 내 계좌에서 진행하니까 내 계좌 주소는 필요가 x!
public void transfer(int amount, BankAccount a){
if(amount > 0){
if(amount <= balance){
setBalance(balance - amount);
a.setBalance(a.getBalance() + amount);
System.out.println("transfer(" + amount + ") 호출 후\n");
} else {
System.out.println("계좌의 잔액이 부족합니다.");
}
} else {
System.out.println("인출액은 양수여야 합니다.");
}
}
// toString - 계좌 잔액 표시
public String toString(){
return "BankAccount [balance=" + balance + "]";
}
}
class Page220_1 {
public static void main(String[] args) {
BankAccount a1 = new BankAccount(10000);
BankAccount a2 = new BankAccount(0);
System.out.println("a1: " + a1);
System.out.println("a2: " + a2 + "\n");
a1.transfer(1000, a2);
System.out.println("a1: " + a1);
System.out.println("a2: " + a2);
}
}
/*
Circle
----------
x : int
y : int
radius : int
----------
Circle(x : int, y : int, radius : int)
static move(temp : Circle, dx : int, dy : int) : void
*/
class Circle {
// 좌표 (x, y)와 반지름 멤버변수
private int x;
private int y;
private int radius;
// 생성자
public Circle(int x, int y, int radius){
setX(x);
setY(y);
setRadius(radius);
}
// getter, setter 메서드
public int getX(){
return x;
}
public int getY(){
return y;
}
public int getRadius(){
return radius;
}
public void setX(int x){
this.x = x;
}
public void setY(int y){
this.y = y;
}
public void setRadius(int radius){
this.radius = radius;
}
// toString (객체 정보를 String으로 반환하는 메서드)
public String toString() {
return String.format("Circle [x=%d, y=%d, radius=%d]", x, y, radius);
}
// 이동 메서드 (parameter = 움직이려는 Circle 객체, x축(가로) 이동치, y축(세로) 이동치)
public static void move(Circle temp, int dx, int dy){
temp.setX(temp.getX() + dx);
temp.setY(temp.getY() + dy);
}
}
public class Page220_2 {
public static void main(String[] args) {
Circle c = new Circle(10, 10, 5);
System.out.println(c + "\n");
Circle.move(c, 10, 20);
System.out.println("move() 호출 후");
System.out.println(c);
}
}
- String.format 메서드 - printf와 유사하게 작동함
public String toString() { return String.format("Circle [x=%d, y=%d, radius=%d]", x, y, radius); }
/*
Car
----------
-model : String
-make : String
-static numberOfCars : int
----------
+Car(model : String, make : String)
+Car(model : String)
+getNumberOfCars() : int
*/
class Car{
// 모델 이름, 생산자 멤버변수
private String model;
private String make;
// 생산된 자동차 총 대수 static변수
private static int numberOfCars;
// 모델 이름과 생산자를 요구하는 생성자
public Car(String model, String make){
this(model);
setMake(make);
}
// 모델 이름을 요구하는 생성자
public Car(String model){
setModel(model);
Car.numberOfCars++;
printNumberOfCars();
}
// getter, setter 메서드
public String getModel(){
return model;
}
public String getMake(){
return make;
}
public void setModel(String model){
this.model = model;
}
public void setMake(String make){
this.make = make;
}
public String toString(){
return model + "(" + make + ")"
}
private static void printNumberOfCars(){
System.out.println(String.format("자동차 1대 생산, 누적 생산량=%d대\n",Car.numberOfCars));
}
// '생산된 자동차 총 대수 static변수'를 가져오는 static getter 메서드
public static int getNumberOfCars(){
return Car.numberOfCars;
}
}
class Page221_4 {
public static void main(String[] args) {
Car c1 = new Car("아우디 S6");
Car c2 = new Car("모닝","기아");
Car c3 = new Car("롤스로이스");
}
}