1. 메소드 프로그램의 한계
- 메소드를 이용하면 로직의 재사용이 가능하여 개발을 효율적으로 할 수 있다.
- 절차지향언어에서 중복된 로직을 메소드의 사용으로 인해 효율성을 높일 수 있다.
- 하지만, 한 문서 내에 메소드의 수가 많아질 경우 추후 유지 보수에 많은 어려움이 발생된다.
2. 객체의 개념 및 클래스의 이해
- 객체는 관련성 있는 데이터와 메소드가 함께 있는 구성체
- 객체 모델링 : 현실세계나 추상적인 내용의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메서드로 정의해 나가는 과정
- 객체와 클래스
- 기계를 만들 때 설계를 하고 설계도면대로 기계를 제작하듯이, 객체의 설계도면인 클래스를 만들고 객체를 생성한다
- 클래스는 객체를 만들기 위한 설계도라고 할 수 있다.
1 Car
- 자동차의 color, cc, speed(park, drive, race) 변수
- getter&setter
private String color; //class 내에서만 쓸 수 있는 변수 선언
private int cc;
private int speed;
public void park() { // void는 리턴을 안 할 때 사용
speed = 0;
System.out.println(color + "색 차 주차한다. 지금 속도 : " + speed);
}
public void drive() {
speed = 60;
System.out.println(color + "색 차 운전한다. 지금 속도 : " + speed);
}
public void race() {
speed = 120;
System.out.println(color + "색 차 레이싱한다. 지금 속도 : " + speed);
}
//getter & setter (color, cc, speed)
//Car car = new Car(); car,getColor()
public String getColor() { //get번수 선언시 변수의 시작은 대문자
return color; //get 시 리턴
}
public void setColor(String color) { //set변수는 리턴이 없으므로 void 사용
this.color = color; //this.color : 내 객체 안의 color
}
public int getCc() {
return cc;
}
public void setCc(int cc) {
this.cc = cc;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
1-1 Car Main class
- myPorsche, urPorsche의 color, cc, drive 설정
- getter&setter 이용 set변수를 이용할 때 변수 첫 시작은 대문자 ex)setCc
public static void main(String[] args) {
Car myPorsche = new Car(); // Car를 이용하여 myPorsche 만들기
myPorsche.setColor("빨강");
myPorsche.setCc(2000);
System.out.println(myPorsche.getColor() + "색 차량 배기량 : " + myPorsche.getCc());
//setColor를 getColor로 불러오기, setCc 를 getCc로 가져오기
myPorsche.drive();
myPorsche.park();
myPorsche.race();
Car urPorsche = new Car(); // Car를 이용하여 urPorsche 만들기
urPorsche.setColor("진회");
urPorsche.drive();
System.out.println("내 차 속도 : " + myPorsche.getSpeed());
// 마지막 속도가 race의 120이었기 때문에 getSpeed = 120
}
빨강색 차량 배기량 : 2000
빨강색 차 운전한다. 지금 속도 : 60
빨강색 차 주차한다. 지금 속도 : 0
빨강색 차 레이싱한다. 지금 속도 : 120
진회색 차 운전한다. 지금 속도 : 60
내 차 속도 : 120
2 Rect
- area(넓이), width(가로), height(세로) 메소드 생성
- getter&setter
private int width;
private int height;
//생성자가 없을 경우 JVM이 자동 생성
public Rect() {} //디폴트 생성자
public Rect(int side) { //매개변수 1개짜리 생성자 함수
width = side;
height = side;
}
public Rect(int width, int height) { //매개변수 2개짜리 생성자 함수
this.width = width;
this.height = height;
}
public int area() {
return width*height;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
2-1 RectMain
- r1, r2, r3 사각형의 데이터(width, height) 출력
- r1, r2, r3 사각형의 area 출력
public static void main(String[] args) {
Rect r1 = new Rect(10, 5);
//System.out.println("r1 : "+ r1.area());
Rect r2 = new Rect();
//System.out.println("r2 : "+ r2.area()); //아직 r1, r2에 setter, getter를 안 했기에 0
Rect r3 = new Rect(7);
//가로 세로 길이
System.out.printf("r1의 데이터 : %d %d\n", r1.getWidth(), r1.getHeight());
System.out.printf("r2의 데이터 : %d %d\n", r2.getWidth(), r2.getHeight());
System.out.printf("r3의 데이터 : %d %d\n", r3.getWidth(), r3.getHeight());
//r1.setWidth(10); r1.setHeight(5);
//System.out.printf("r1의 데이터 변경 후 : %d %d\n", r1.getWidth(), r1.getHeight());
//System.out.printf("r2의 데이터 : %d %d\n", r2.getWidth(), r2.getHeight());
System.out.println("r1의 넓이 : " + r1.area());
System.out.println("r2의 넓이 : " + r2.area());
System.out.println("r3의 넓이 : " + r3.area());
}
r1의 데이터 : 10 5
r2의 데이터 : 0 0
r3의 데이터 : 7 7
r1의 넓이 : 50
r2의 넓이 : 0
r3의 넓이 : 49