Object-Oriented Programming(객체지향 프로그래밍)

JK·2022년 12월 17일
0

JAVA

목록 보기
8/28
post-thumbnail

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
profile
씨앗 개발자

0개의 댓글