본문 바로가기

언어/Java

절차지향 VS 객체 지향

※ 절차지향언어(C, COBOL)
ex) 원을 회전시킨다 (ver1) + 사각형을 회전시킨다(ver up해서 기능 추가)

→ 절차지향개발자들은 회전시킨다는 기능부터 먼저 완성하려고 함

    ▷ 제공자용 코드(기능용 함수) 만들기
         (ver1) int 타입의 매개변수 만듬

 void rotate(int radius) {
 	//radius를 반지름으로 중심축 기준으로 회전시킨다
 }

         (ver2) 버전마다 rotate 함수의 내용이 변경되어야하는 불편함이 있음       

void rotate(int opt, int a, int b){
	if(opt == 1) { // 원
    	a를 반지름으로 중심축 회전시킨다
	}
	else if(opt == 2) { // 사각형
    	a를 가로, b를 세로로 중심축 회전
	}
}

    ▷ 사용자용 코드 (제공자용 코드(기능)이 제공되었으면 이 기능을 사용하는 사용자쪽 개발자도 있다)
         (ver1)

void user() {
	rotate(5);
}

        ver2. 결합도가 높은 코드(제공된 쪽 소스코드가 바뀜에 의해 사용자 쪽 소스코드도 바뀌어야함)

void user(){
	rotate(1, 5, 0);
}

 

※ 객체지향언어(JAVA, C++, C#)
c++은 c에서 발전된거라 절차지향언어, 객체지향언어 둘 다 섞여있음
ex) 을 회전시킨다(ver1) 사각형을 회전시킨다(ver up해서 기능 추가) 

객체지향언어개발자들은 기능을 담고있는 것(것=Thing*)인 원부터 먼저 완성하려고 함, 사각형부터 만드려고 한다.

 

*Object : Thing 물리적인 사물 + 추상적개념(ex)사원, 주문)

    ▷ 제공자용 코드

class Circle{
	int radius;
	void rotate() {
		//radius를 반지름으로 중심축 기준으로 회전시킨다
	}
}

ver2 기존꺼 수정이 아니라 새로운 class 추가함 = 결합도를 낮출 수 있다. 

class Rectangle{
	int width;
	int height;
	void rotate() {
		// width를 가로, height를 세로 중심축 기준 회전시킨다
	}
}


    ▷ 사용자용 코드

void user(){
    Circle c = new Circle(); // 객체 생성, 변수에 담아둠
    c.radius = 5;
    c.rotate();
}

 

: 절차지향언어 개발 속도가 더 빠르다. 절차지향언어 제공자용 코드 = 간결, 깔끔
  객체지향언어 개발 속도 더딤


※ 객체지향언어의 목적 : class의 재사용성을 높이자

 

※ 객체란?
    Circle c = new Circle(); // 인스턴스화 = 객체를 만드는 작업
    인스턴스화의 결과물이 객체(=인스턴스)

    객체를 만드려면 class가 필요함,
    클래스 = 객체를 만드는 틀/템플릿

 객체지향프로그램의 목적 : 클래스의 재사용성을 높이자

'언어 > Java' 카테고리의 다른 글

클래스  (0) 2023.07.28
이클립스 새 프로젝트 만들기  (0) 2023.07.27
2차원 배열 예제  (0) 2023.07.26
멤버변수와 지역변수  (0) 2023.07.26
배열 예제  (0) 2023.07.26