본문 바로가기
JAVA

[JAVA] 객체지향

by 주옹스 2020. 7. 31.

1. 객체지향이란 ?

 

- 실제 세계를 모델링 하여 SW를 개발하는 방법.

 

- 현실세계에서 존재하는 실체 및 개념들을 객체라는 독립된 단위로 구성하고 이 객체들이 메세지 교환을    통해 상호작용함으로써 전체 시스템이 운영되는 개념

 

- 현실세계의 개체를 데이터오퍼레이션결합된 형태의 객체로 표현

객체지향

 

 

   특징

   - 데이터가 중심

       >> 데이터가 바뀌면 객체자체가 바뀌기 때문에 중요한 데이터는 외부에서 접근 못하게 해야함

 

   - 성능보다는 개발의 편리성과 효율성을 높이는데 목적이 있음

 

   - 관리하는 데이터를 정의하고, 이에 필요한 명령어를 추가

 

   - 쉬운 프로그램의 개발로 인한 생산성 향상 시킬 수 있음

 

   - 프로그램 모듈을 재사용 할 수 있음.

 

   - 프로그램의 확장 및 유지 보수가 용이

 

 

 

 

2. 객체(Object) ?

        객체 = 상태 + 동작

               = 속성 + 프로시저

               = 필드 + 메소드

 

 

 

 

 

3. 인스턴스(Instance) ?

     객체를 메모리에 할당받은 상태.

      

      >> 인스턴스 변수 : 객체를 생성 할 때마다 메모리 할당을 받음 

 

 

 

 

4. 클래스 (Class) ?

       객체에 적용할 수 있는 데이터와 오퍼레이션을 정의한  SW설계도

 

        * 클래스 생성에 필요한 두가지

            1. 뭘 저장하지?

          2. 뭘 만들지?

 

 

 

클래스의 이해를 도와주는 그림

 

 

1. 클래스 작성법 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package ex0731;
 
/* 1. 추상화
 * 
 *  - 성적처리  CLASS
 * 
 *  - 속성 (멤버 변수 or 필드)
 *    이름, 국어, 영어
 *   
 *  - 기능(메소드) 
 *    1. 총점을 계산한다.
 *    2. 평균을 계산한다
 *    
 * 2. 클래스 만들기
 * 3. 객체생성
 * */
 
public class Class_Score {
    
    //속성(필드, 인스턴스 변수)
    String name;
    int Kor, Eng;
 
    //기능(인스턴스메소드)
    public int tot() {
        return Kor+Eng;
    }
    
    public int ave() {
        return tot()/2;
    }
}
 
//public class는 하나만생성!!!!!!
//class {}는 한 파일에 계속 생성할 수 있지만 이렇게 생성하면 어지러움!!
cs

 

 

2. Score클래스의 객체 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package ex0731;
 
import java.util.Scanner;
 
// " . : 점 " --> 객체에 대한 속성으로 접근하는 연산자 (우선순위 TOP!!)
// 사용 할 클래스가 동일한 위치에 없으면 import해야함
 
 
public class Class_Test1 {
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        //방법1)
        // 레퍼런스변수 선언
        Class_Score ob1;
        // 객체 생성
        ob1 = new Class_Score(); 
        
        //방법2)
        //객체 선언 및 메모리 할당
        //Class_Score ob2 = new Class_Score();
        
        
        //System.out.println(ob1.name + ":"+ ob1.tot()); //null:0
        
        System.out.print("이름은 ? ");
        ob1.name = sc.next();
        System.out.print("국어점수 ? ");
        ob1.Kor = sc.nextInt();
        System.out.print("수학점수 ? ");
        ob1.Eng = sc.nextInt();
        
        System.out.println(ob1.name + " 총점: "+ ob1.tot()+" 평균: "+ob1.ave()); //입력한 이름 : 총점
 
        sc.close();
    }
}
 
 
cs

 

 

 

객체지향의 특징

1. 추상화

   객체에서 공통된 속성과 행위를 추출하는것

 

추상화 이해를 위한 그림

 

 

2. 캡슐화

  - 객체의 속성과 행위를 하나로 묶고 실제 구현내용을 외부에 감추어 은닉한다.

  - 객체 외부에서는 개체 내부 정보를 직접 접근하거나 조작할 수 없고, 외부에서 접근할 수 있도록 정의된      오퍼레이션을 통해서만 관련 데이터에 접근 할 수 있다.

 

 * 정보은닉

   정보은닉은 한 모듈에서 인터페이스와 구현을 명확히 분리하여 각 모듈의 내부 항목에 관한 정보는

   감추고, 인터페이스를 통해서만 메세지를 전달함으로 다른 모듈을 변경하지 못하도록 한다.

    -> 캡슐화했다고 해서 그 자체로 내부의 정보가 외부에 숨겨지지 않는다. 

 

 

 

 

3. 상속

    - 상속은 클래스의 속성과 행위를 하위 클래스에 물려주거나, 상위 클래스에서 물려받는 것을 지칭.

 

상속이해를 위한 그림

 

 

 

4. 다형성

- 하나의 클래스 내부에 같은 이름의 메소드를 여러 개 정의하거나, 상위 클래스의 오퍼레이션을

  하위 클래스에서 다시 정의하여 사용하는 것을 다형성이라 함

 

 

다형성의 이해를 위한 그림

 

 [ 다형성의 특징 ]

  - Overloading : 동일한 이름의 Operation 사용 - 수평적

  - Overriding : 슈퍼 클래스의 메소드를 서브클래스에서 재정의 - 수직적

 

 

 

 

* 막간 설명!

코드작성   ->  컴파일  ->  실행

                번역           메모리할당

'JAVA' 카테고리의 다른 글

[JAVA] 레퍼런스 변수  (0) 2020.08.03
[JAVA] 클래스  (0) 2020.07.31
[JAVA] 명령 행 인수  (0) 2020.07.31
[JAVA] ArrayCopy(배열복사)  (0) 2020.07.31
[JAVA] TwoDimensionArray(2차원배열)  (0) 2020.07.30