클래스 이용 객체지향, 기본 문법 이해

JongseokLee·2021년 7월 25일
0
post-thumbnail

클래스 이용 객체지향, 기본 문법 이해

객체지향 프로그래밍의 개요✍

객체(object)란?

-특성과 기능을 가지는 하나의 독립적인 개체(entity)

객체(object)모델링

-객체의 특성과 기능을 분석하고 정리하는 작업

클래스(class) 정의

-객체 모델링을 한 후에 특성과 기능을 정의하는 도구

객체 생성하고 사용하기

-정의된 클래스를 new 연산자를 이용하여 메모리에 할당
-메모리에 할당된 클래스: 객체, 인스턴스(instance),클래스의 변수
-점(.)을 이용하여 클래스에 정의된 변수를 상요하거나 메소드를 호출

객체지향 프로그램 구현✍

클래스 이름 정의

-변수명 규칙과 동일, 관행적으로 첫 문자는 대문자

메소드 구현하기

-메소드:반복되어 실행될 명령문들을 모아놓은 모듈

main() 메소드

-프로그램의 시작 메소드
-클래스 내부에 정의되지만 멤버 메소드는 아님

객체 생성하기

-프로그램의 시작 메소드
-클래스 내부에 정의되지만 멤버 메소드는 아님

객체 생성하기

-main() 메소드에서 생성함

가비지 콜렉팅(garbage collecting)✍

필요 없어진 메모리를 해제하여 시스템에 반환하는 것

생성자(constructor) 메소드✍

객체를 생성 시 호출되는 메소드

메소드 오버로딩(overloading)✍

하나의 클래스 내부에 동일한 이름의 메소드를 여러 개 정의하는 것

메소드 가변 인수✍

메소드의 인수를 가변으로 지정하는 것
인수의 개수는 1부터 n개 까지 지정 가능

this,this()✍

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
    ```
    
    
profile
DataEngineer Lee.

0개의 댓글