자바/자바 기초

객체지향

qkwi 2021. 11. 10. 17:05
728x90

6장 복습

객체지향 언어 특징

1. 코드의 재사용성이 높다.
>> 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

2. 코드의 관리가 용이하다.
>> 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
>> 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.
  • 상속, 다형성과 같은 객체지향개념을 학습할 때 재사용성과 유지보수 그리고 중복된 코드의 제거, 이 세가지 관점에서 보면 보다 쉽게 이해할 수 있을 것이다.

클래스와 객체

2.1 클래스와 객체의 정의와 용도

  • 클래스

    클래스의 정의: 클래스란 객체를 정의해 놓은 것이다.
    클래스의 용도: 클래스는 객체를 생성하는데 사용된다.
  • 객체

    객체의 정의: 실제로 존재하는 것. 사물 또는 개념
    객체의 용도: 객체가 가지고 있는 기능과 속성에 따라 다름
    

유형의 객체: 책상, 의자, 자동차, TV와 같은 사물
무형의 객체: 수학 공식, 프로그램 에러와 같은 논리나 개념



### 2.2 객체와 인스턴스

- 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.

- 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있다.
- 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미를 갖고 있다.

### 2.3 객체의 구성 요소
```bash
속성 -> 멤버변수
기능 -> 메서드
  • 멤버변수와 메서드를 선언하는데 있어서 순서는 관계 없지만, 일반적으로 메서드보다는 메버변수를 먼저 선언하고 멤버변수는 멤버변수 끼리 메서드는 메서드끼리 모아 놓는 것이 일반 적이다.

2.4 인스턴스의 생성과 사용

클래스 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명();// 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장;

Person yushin;
yushin = new Person();
  • 인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.

클래스의 또다른 정의

  • 클래스는 객체를 생성하기 위한 틀이며 클래스는 속성과 기능으로 정의되어 있다. (객체 지향이론 관점)

  • 프로그래밍 관점에서 클래스의 정의와 개념

    • 클래스 - 데이터와 함수의 결합

      ```bash
      프로그래밍 언어에서 데이터 처리를 위한 데이터 저장 형태의 발전과정은 다음과 같다.

    1. 변수 : 하나의 데이터를 저장할 수 있는 공간.

    2. 배열 : 같은 종류의여러 데이터를 하나의 집합으로 저장할 수 있는 공간.

    3. 구조체: 서로 관련된 여러 데이터를 종류에 관계 없이 하나의 집합으로 저장할 수 있는 공간

    4. 클래스: 데이터와 함수의 결합(구조체+함수)

      그동안 데이터와 함수가 서로 관계가 없는 것처럼 데이터는 데이터끼리, 함수는 함수끼리 따로 다루어져 왔지만,
      사실 함수는 주로 데이터를 가지고 작업을 하기 때문에 많은 경우에 있어서 데이터와 함수는 관계가 깊다.

      ex) String 클래스는 문자열 관련된 저장 공간과 연관된 함수를 같이 구현하기 위해 클래스로 정의했다.

    • 클래스 - 사용자 정의 타입

      • 프로그래밍언어에서 제공하는 자료형외에 프로그래머가 서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것을 사용자 정의 타입이라고 한다.

      • 자바에서는 클래스가 곧 사용자 정의 타입이다.

      • 자바에서는 데이터에 관한 추가적인 제약조건을 쉽게 반영할 수 있다.

        • 제어자와 메서드를 이용해서 조건들을 추가한다.

          public class person{
          private String name;
          
          public String getName(){
            return name;
          }
          public void setName(String name){
            if (s.length() < 3){
                return;
            }
          }
          }
728x90