<Java> 객체지향

·2023년 6월 2일
0

Java

목록 보기
4/7
post-thumbnail

객체지향 언어란?

컴퓨터를 이용하여 현실세계를 그대로 모방해 가상세계를 구현하려는 노력으로부터 생겨남.

특징

  • 코드의 재사용성이 높다.
  • 코드의 관리가 쉽다.
    1) 각각의 객체 하나가 프로그램을 구성하는 부품이다. 데이터와 기능을 가지고 있기 때문에 (코드의 유지보수에 용이)
  • 신뢰성이 높은 프로그램의 개발을 가능하게 한다.
    1) 제어자와 메서드를 이용해서 데이터를 보호하고, 코드의 중복을 제거하여 코드의 불일치 오류를 방지할 수 있다.

클래스와 객체

objectinstance는 서로 비슷하다.

new 생성자로 만든 객체 => instance

클래스

Class

메모리에 실제 존재하지 않음.

정의 ) 객체를 정의해놓은 것.
용도 ) 객체를 생성하는데 사용된다.

class 자체는 단순한 정의이다. (메모리에 실제하지 않음.)

Class의 다른 정의

  1. 클래스 - 데이터와 함수의 결합
    • 데이터 == 서로 다른 형태의 데이터 | 함수 == 메서드
  2. 클래스 - 사용자 정의 타입(User Defined Type)
    1. 개발자가 직접 새로운 타입을 정의할 수 있다.
    2. 서로 관련된 값을 묶어서 하나의 타입으로 저장한다.

객체

객체 추상화 과정 (3 Step)

  1. 대상 객체 선정
  2. 대상 객체 기능, 속성 식별
  3. 실제 사용되는 기능,속성 선정

object

메모리에 실제 값이 존재한다.
정의 ) 실제로 존재하는 것 사물 Or 개념
용도 ) 속성과 기능에 따라 다르다.

객체를 바라볼 때 접근방법

객체를 바라볼 때 기능보다는 데이터가 우선이다.

객체의 기능은 해당 객체가 가지고있는 데이터를 기반으로 기능해야한다. (데이터 종속적)

예시로 아래와 같은 Human이라는 Class를 이렇게 만들면 좋은 Class일까?

public class Human {
	int height, weight;
    String name, sex;
    
    String eat() {
		return "현재 몸무게는 " + weight + "kg 입니다.";
    }
}

변수와 전혀 상관없는 eat이라는 메서드가 있고, 해당 메서드는 String을 반환한다.

✅ 그래서?

데이터 종속적이라는 말의 의미는 해당 객체가 가지고 있는 변수를 기반으로 의미가 이어지는 메서드를 작성해야하는 것이라 생각한다.

현재 eat 메서드는 변수와 전혀 상관관계가 없으므로 좋은 class가 아님을 확신할 수 있다.

객체와 인스턴스

객체는 인스턴스를 포함하는 일반적인 의미

객체의 구성요소

객체는 속성기능의 집합이며, 속성과 기능을 객체의 멤버(member, 구성요소)라고 한다.

속성 ➡️ 변수 | 기능 ➡️ 메서드로 정의한다.

package chap06;

public class Time {
    int hour, minute, second; // 속성(변수)

    void setHour(int h) { // 해당 코드 밑으로 기능(메서드)
        hour = h;
    }

    void setMinute(int m) {
        minute = m;
    }

    void setSecond(int s) {
        second = s;
    }

    String currentTime() {
        return hour + "시 " + minute + "분 " + second + " 초 입니다.";
    }
}

인스턴스의 생성과 사용

인스턴스 생성방법

  • 클래스 이름 참조변수 이름; // 객체를 다루기 위한 참조변수 선언
  • 참조 변수 이름 = new 클래스 이름 // 객체 생성 후, 생성된 객체의 주소를 참조변수에 저장.
Time korea; // 클래스 이름(Time), 참조변수 이름(korea)
korea = new Time(); // 참조변수 이름(korea), (new 클래스 이름)

korea는 Time Type의 붕어빵 틀로 만들어진 붕어빵(인스턴스).

객체의 메모리 주소

여러 객체하나의 메모리 주소를 같이 참조할 수 있다.

하지만 하나의 객체가 여러 메모리 주소를 참조할 수 없다.


Reference Array(참조 배열)

Time[] world = new Time[3];
// world라는 이름의 길이가 3인 Time 배열을 하나 생성해라.
// 각각의 길이가 배정된 인덱스들은 Time Class의 변수와 메서드를 가지고있다.
Ex ) world[0].setHour(3) 등등
profile
- 배움에는 끝이 없다.

0개의 댓글