객체(object)란?
-특성과 기능을 가지는 하나의 독립적인 개체(entity)
객체(object)모델링
-객체의 특성과 기능을 분석하고 정리하는 작업
클래스(class) 정의
-객체 모델링을 한 후에 특성과 기능을 정의하는 도구
객체 생성하고 사용하기
-정의된 클래스를 new 연산자를 이용하여 메모리에 할당
-메모리에 할당된 클래스: 객체, 인스턴스(instance),클래스의 변수
-점(.)을 이용하여 클래스에 정의된 변수를 상요하거나 메소드를 호출
클래스 이름 정의
-변수명 규칙과 동일, 관행적으로 첫 문자는 대문자
메소드 구현하기
-메소드:반복되어 실행될 명령문들을 모아놓은 모듈
main() 메소드
-프로그램의 시작 메소드
-클래스 내부에 정의되지만 멤버 메소드는 아님
객체 생성하기
-프로그램의 시작 메소드
-클래스 내부에 정의되지만 멤버 메소드는 아님
객체 생성하기
-main() 메소드에서 생성함
필요 없어진 메모리를 해제하여 시스템에 반환하는 것
객체를 생성 시 호출되는 메소드
하나의 클래스 내부에 동일한 이름의 메소드를 여러 개 정의하는 것
메소드의 인수를 가변으로 지정하는 것
인수의 개수는 1부터 n개 까지 지정 가능
this
-클래스 내부에서 현재 자신의 객체를 참조하는 참조 변수
-멤버 변수나 멤버 메소드를 참조하는 참조 변수
this() 메소드
-생성자 메소드 내부에서 다른 생성자 메소드를 호출
-생성자 메소드 내부에서 첫 줄에 한번만 사용 가능
-생성자 메소드 내부에서 중복된 코드를 줄일 수 있음
정적 멤버 변수: 해당 클래스로 생성된 모든 객체에서 변수의 값을 공유함
정적 멤버 메소드: 클래스의 객체 생성 없이 메소드 사용 가능
1)Robot 클래스 설계 및 구현
2)특성: 현재 위치, 각도, 작업량
3)기능: 이동하기, 작업하기
4)필요에 따라 특성 및 기능 추가
5)생성자 메소드, 멤버 메소드, 정적 변수, 정적 메소드, 가변 인자 사용
public class Robot {
static String name = "Robot Arm"; // 로봇 이름
static int limitX = 100; // 로봇 x 좌표 한계
static int limitY = 200; // 로봇 y 좌표 한계
int x; // 로봇의 현재 x 좌표
int y; // 로봇의 현재 y 좌표
int angle; // 로봇팔의 각도
static int job; // 로봇팔로 물건 옮긴 횟수
public Robot() {
}
public Robot(int x, int y, int angle) {
this.x = x;
this.y = y;
this.angle = angle;
}
public Robot(int x, int y, int angle, int job) {
this(x, y, angle);
this.job = job;
}
boolean gotoxy(int x, int y) { // 로봇 좌표 이동
int tx = this.x + x;
int ty = this.y + y;
if(tx > limitX || ty > limitY) { // 좌표 이동 한계를 넘으면 에러 발생
System.out.println("ERROR XY !!");
return false;
} else { // 좌표 이동 한계 내이면 로봇 이동
System.out.println("MOVE XY ["+tx+","+ty+"]");
this.x = tx;
this.y = ty;
return true;
}
}
void gotoxy(int ... xy ) { // 로봇 좌표 이동(가변 인자) x1, y1, x2, y2 ...
for(int i=0; i< xy.length; i+=2) {
boolean result = gotoxy(xy[i], xy[i+1]);
if(result == false) break; // 좌표이동시 에러 발생하면 이동 종료
}
}
void armAngle(int angle) { // 로봇팔 각도 조정
int ta = this.angle + angle;
if( ta > 360 ) this.angle = ta - 360;
else if( ta < 0 ) this.angle =360 + ta;
else {
this.angle = ta;
System.out.println("Robot Angle : "+this.angle);
}
}
void pickup() {
System.out.println("xy["+x+","+y+"], angle["+angle+"] Pick Up !!");
}
void putdown() {
System.out.println("xy["+x+","+y+"], angle["+angle+"] Put Down !!");
Robot.job++; // 물건을 내려놓으면 한번 작업(로봇이 여러대 있으면 모든 로봇의 작업량 카운터)
}
static String whoami() {
String result = "Robot name : "+Robot.name + " Limit XY["+limitX+","+limitY+"]";
return result;
}
public static void main(String[] args) {
System.out.println(Robot.whoami());
Robot a = new Robot(10,10,10);
Robot b = new Robot(20,20,10,100);
boolean ok = a.gotoxy(15,15); // 좌표이동
if(ok) {
a.armAngle(150); // 각도 조정
a.pickup(); // 물건 집기
a.putdown(); // 물건 내려놓기
}
ok = b.gotoxy(95,80); // 좌표이동
if(ok) {
b.armAngle(355);
b.pickup();
b.putdown();
}
System.out.println("Job Count = "+Robot.job);
}
}
<Result>
Robot name : Robot Arm Limit XY[100,200]
MOVE XY [25,25]
Robot Angle : 160
xy[25,25], angle[160] Pick Up !!
xy[25,25], angle[160] Put Down !!
ERROR XY !!
Job Count = 101
```