Programming/Java

4. 객체지향 프로그래밍

주죵 2021. 1. 3. 12:04
728x90
반응형

객체지향 이전의 프로그래밍

절차지향 프로그래밍

절차지향 프로그래밍은 코딩한대로 위에서 아래로 순차적으로 쭉 실행된다.

 

절차지향의 단점

- 비효율적인 부분이 존재한다.

1) 값이 변경되는 경우엔 동일한 작업이지만 매번 소스코드를 수정해야한다.

2) 기존의 로직을 다시 사용할때 다시 코딩하거나 기존코드를 카피해 재사용하는 방식이나 모두 비효율적이다.

3) 2)의 방법은 동일한 로직의 코드가 반복되어 코드의 양이 길어지고 유지보수가 어려워진다.

 

 

메소드의 이해

이를 위해 등장한 방식이 함수 or 메소드이다.

로직만 만들어놓고, 사용할 때 소스(데이터)를 주면 메소드가 알아서 결과값을 반환하는 방식이다.

 

예시를 통해 메소드에 대해 이해해보자.

/*자바의 메소드는 접근제한자 - 반환type - 메소드명(input parameter){메소드 로직}
순으로 구성. 반환type에 반환이 없을때는 void를 사용한다
i부터 j까지의 sum을 구하는 method 예시*/
public int sum(int i, int j){
	int r=0;
    for(int h=i,h<=j,h++){
    		r = r+h;}
            
            return r;
       }
import java.util.Scanner;

public class GuGuDan {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int input = scanner.nextInt();
		GuGuDan gugu = new GuGuDan(); //gugu라는 GuGuDan class의 객체 생성
        
		gugu.gugudan(input);

	}
	public void gugudan(int i) {
		for (int j=1; j<10; j++) {
			System.out.println(i+"*"+j+"="+(i*j));
		}
	}

}

- 하지만 여전히 한계점이 존재한다/

데이터가 많아지고 메소드가 많아짐에 따라 코드의 양이 많아지고, 유지보수가 어려워졌다.

따라서 '객체지향 프로그래밍'이 등장한다.

 

객체지향 프로그래밍

객체의 개념

객체란 동일한 성질의 데이터와 메소드를 한곳에 모아두고 필요한 곳에서 언제든지 이용할 수 있게 만들어 놓은 덩어리이다. 

다시 한번 말하자면 객체는 같은 종류의 데이터와 로직이 함께 있는 구성체이다. 객체는 메소드와 비슷하지만 그 상위개념이라 할 수 있다. 즉 완전한 '독립체'이다. 

객체를 만들기 위해선 클래스를 만든다. 이후 클래스에서 객체를 생성한다.  

 

데이터 처리 방법

색상이 결정되지 않은 자동차를 클래스라고 하자.

구매자가 색상을 결정하면 그때 클래스로부터 객체가 생성된다.(빨간색 자동차)

이때 생성된 객체는 계약을 한 소비자의 것이다. (독립체이므로 빨간색자동차와 녹색 자동차는 전혀 관계가 없다.)

 

객체자료형과 변수와의 관계

객체자료형은 메모리상에 어떻게 존재할까?

객체하나를 만들면 메모리상에 객체가 존재하는 주소값이 있고, 그 주소값이 객체 변수에 담긴다. 

 

객체안의 데이터

객체는 클래스로부터 생성된다. 생성된 객체는 동일한 클래스에서 생성되었다 하더라도 완전한 독립체이다.

따라서, 객체 안에 종속되어 있는 데이터는 완전히 별개의 데이터이다.

 

ex)

Class1(int i) 에서 나온 Object1(int i) / Object2(int i)

Ojbect 1의 i와 2의 i는 다른 데이터이다.

 

출처 : 신입 SW인력을 위한 실전 자바 (강사 : 블스)

 

 

 

728x90

'Programming > Java' 카테고리의 다른 글

6. 패키지 및 접근제한  (0) 2021.01.03
5. 객체지향 프로그래밍  (0) 2021.01.03
3. 배열  (0) 2020.12.30
2. 변수와 연산자  (0) 2020.12.30
1. Java란  (0) 2020.12.29