[Java] 06-1 객체 지향 프로그래밍

Haeun Noh·2022년 9월 16일
0

0916


객체 (object)

: 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것을 말한다.

객체는 속성과 동작으로 구성되어 있다.

  • 속성 : 이름, 나이, 색깔, 모델명
  • 동작 : 걷다, 웃다, 달린다, 멈춘다

자바는 이 속성과 동작을 각각 필드 (field)메서드 (method)라고 부른다.


  • 객체 모델링 (object medeling) : 현실 세계의 객체를 소프트웨어 객체로 설계하는 것

객체 모델링은 현실 세계 객체의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메서드로 정의하는 과정이라고 볼 수 있다.



객체의 상호작용

현실 세계에서 일어나는 모든 현상은 객체와 객체 간의 상호작용으로 이루어져 있다.


소프트웨어에서도 마찬가지.

객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용하면서 동작한다.
이 때 객체들 사이의 상호작용 수단은 메서드이다.
객체가 다른 객체의 기능을 이용하는 것이 바로 메서드 호출이다.

메서드 호출은 다음과 같은 형태를 띄고 있다.

리턴값 = 전자계산기객체.메서드(매개값1, 매개값2, ...);
		L______1.________| L_________2.________|
  1. 객체에 도트.연산자를 붙이고 메서드 이름을 기술하면 된다. 도트 연산자는 객체의 필드와 메서드에 접근할 때 사용한다.
  2. 매개값은 메서드를 실행하기 위해 필요한 데이터다. 예를 들어 1020을 주고 더하기 기능을 이용한다고 할 때 1020이 더하기 기능의 매개값이다. 리턴값은 메서드가 실행되고 난 후 호출한 곳으로 돌려주는 값이다.

다음은 자바 코드로 본 메서드 호출이다.

int result = Calculator.add(10, 20);
//리턴한 값을 int변수에 저장


객체 간의 관계

객체는 개별적으로 사용될 수도 있지만, 대부분 다른 객체와 관계를 맺고 있다.

관계의 종류와 예시는 다음과 같다.

  • 집합 관계 : 하나는 부품, 하나는 완성품
  • 사용 관계 : 객체 간의 상호작용
  • 상속 관계 : 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계
  1. 자동차는 엔진, 타이어, 핸들 등으로 구성되므로 자동차와 이 부품들은 집합관계라고 볼 수 있다.
  2. 사람과 자동차는 사용관계라고 볼 수 있다.
  3. 기계(상위)와 자동차(하위)는 상속 관계에 있다고 볼 수 있다.

객체 지향 프로그래밍 : 만들고자 하는 완성품인 객체를 모델링하고, 집합 관계에 있는 부품 객체와 사용 관계에 있는 객체를 하나씩 설계한 후 조립하는 방식으로 프로그램을 개발하는 기법



객체와 클래스

클래스 (class)

: 설계도의 개념

클래스에는 객체를 생성하기 위한 필드와 메서드가 정의되어 있다.


인스턴스 (instance)

: 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다.

자동차 객체는 자동차 클래스의 인스턴스인 셈이다.

인스턴스 화 : 클래스로부터 객체를 만드는 과정
동일한 설계도로 여러 대의 자동차를 만드는 것과 동일하다.


객체 지향 프로그래밍 개발 단계

  1. 클래스 설계
  2. 설계된 클래스를 가지고 사용할 객체 생성
  3. 생성된 객체 이용


클래스 선언

사용하고자 하는 객체를 구상했다면 그 객체의 대표 이름을 하나 결정하고 이것을 클래스 이름으로 정한다.

예시를 들어보자.

  • 사람 객체의 클래스 -> Person
  • 자동차 객체의 클래스 -> Car

클래스 이름은 자바의 식별자 작성 규칙에 따라서 만들어야 한다.


식별자 작성 규칙

  • 하나 이상의 문자로 이루어져야 한다.
  • 첫 글자에는 숫자가 올 수 없다.
  • $ _ 외의 특수 문자는 사용할 수 없다.
  • 자바 키워드는 사용할 수 없다.

클래스 선언

public class 클래스이름 {

}
//차 클래스 생성
public clas Car {

}
//두 개 이상의 클래스 선언
public class Car {
}

public class Tire {
}


객체 생성과 클래스 변수

객체 생성

클래스로부터 객체를 생성하려면 다음과 같이 new 연산자를 사용하면 된다.

new 클래스();

new : 클래스로부터 객체를 생성시키는 연산자

생성자는 클래스() 형태를 가지고 있다.

new 연산자로 생성된 객체는 메모리 힙 (heap)영역에 생성된다.


객체 지향 프로그램에서 메모리 내에 생성된 객체의 위치를 모르면 객체를 사용할 수 없다. 따라서 new 연산자는 힙 영역에 객체를 생성시킨 후 객체의 번지를 리턴하도록 되어 있다.

이 주소를 클래스 변수에 저장해두면 변수를 통해 객체를 사용할 수 있다.

//클래스로 선언된 변수에 new연산자가 리턴한 객체의 번지를 저장
클래스 변수;
변수 = new 클래스();
//클래스 변수 선언과 객체 생성을 1개의 실행문으로 작성
클래스 변수 = new 클래스();

예제를 통해 클래스 선언부터 생성까지 익혀보자.

//클래스 선언
package sec01.exam01;

public class Student {
}
//클래스로부터 객체 생성
package sec01.exam01;

public class StudentExample {
//라이브러리로서의 코드(필드, 생성자, 메서드)

//실행하기 위한 코드
	public static void main(String args[]) {
    	Student s1 = new Student();
        System.out.println("s1변수가 Student 객체를 참조합니다.");
        
        Student s2 = new Student();
        System.out.println("s2변수가 Student 객체를 참조합니다.");
    }
}
//실행결과
s1변수가 Student 객체를 참조합니다.
s2변수가 Student 객체를 참조합니다.

StudentStudentExample 클래스의 용도

클래스에는 두 가지의 용도가 있다.

  • 라이브러리 API : Application Program Interface
  • 실행용

라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다.

실행 클래스는 프로그램의 실행 진입점인 main() 메서드를 제공하는 역할을 한다.



클래스의 구성 멤버

클래스에는 객체가 가져야 할 구성 멤버가 선언된다.

  • 필드 Field : 객체의 데이터가 저장되는 곳
  • 생성자 Constructor : 객체 생성 시 초기화 역할 담당
  • 메서드 Method : 객체의 동작에 해당하는 실행 블록

이 구성 멤버들은 생략되거나 복수의 개수로 작성될 수 있다.

public class ClassName {
	
    //필드
    int fieldname;
    
    //생성자
    ClassName() { .. }
    
    //메서드
    void methodName() { .. }
    
}

필드

: 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳

선언 형태는 변수와 비슷하지만 필드를 변수라고 부르지는 않는다.

  • 변수는 생성자와 메서드 내에서만 사용되고 생성자와 메서드가 실행 종료되면 자동으로 소멸된다.
  • 필드는 생성자와 메서드 전체에서 사용되며 객체가 소멸하지 않는 한 객체와 함께 존재한다.

생성자

: new 연산자로 호출되는 특별한 중괄호 { } 블록

  • 역할 : 객체 생성 시 초기화
    필드를 초기화하거나 메서드를 호출해 객체를 사용할 준비를 한다.

메서드와 비슷하게 생겼지만 클래스 이름으로 되어 있고 리턴 타입이 없다.


메서드

: 객체의 동작에 해당하는 중괄호 { } 블록
: 객체 간의 데이터를 전달하는 수단

  • 메서드 이름 : 중괄호 블록이 가지고 있는 이름

메서드는

  • 외부(호출한 곳)로부터 매개 값을 받아 실행에 이용하고
  • 실행 후 결과 값을 외부(호출한 곳)로 리턴할 수도 있다.


마무리 정리

  • 클래스 : 객체를 만들기 위한 설계도
  • 객체 : 클래스로부터 생성되며 new 클래스()로 생성
  • new 연산자 : 객체 생성 연산자, 생성자를 호출하고 객체 생성 번지를 리턴
  • 클래스 변수 : 클래스로 선언한 변수를 말하며 해당 클래스의 객체 번지가 저장됨
  • 인스턴스 : 객체는 클래스의 인스턴스임
  • 클래스 멤버 : 클래스에 선언되는 멤버는 필드 생성자 메서드가 있음


profile
Tistory로 옮기게 되었습니다. @haeunnohh

0개의 댓글