Java/객체지향 프로그래밍(OOP)

객체 지향 프로그래밍(OOP, Object-Oriented Programming)

PiccoBella 2023. 3. 18. 22:31

객체란? (object)

객체(object)란 실생활에서 우리가 인식할 수 있는 사물로 설명 할 수 있는데 이러한 객체의 상태(state)와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍이다.  객체 지향 프로그램은 모든 데이터를 객체(object)로 취급하고  객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 한다.  또한 ‘클래스의 인스턴스(instance)’ 라고도 부른다.

 

클래스(class)

클래스란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용된다. 사물인 객체를 컴퓨터 프로그램에서 이용하기 위해서는 컴퓨터 메모리에 존재해야 하는데 이러한 객체들을 추상화 하여 소스코드 형태의 클래스를 만드는 것이다. 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method) 로 구성된다.  예를들어,

객체이름 학생
상태적 특징을 나타내는 필드 (field) 학교 이름, 전공, 학년, 학번, 성별, 이름, 시험점수, 나이, 주소
행동을 나타내는 메소드 (method) 점심을 먹는다, 수업을 듣는다, 시험을 본다, 게임을 한다

 

인스턴스(instance)

 

https://codemate.kr/project/

 

클래스가 객체의 설계도 혹은 '틀'이라고 설명할 수 있다면 틀을 먼저 클래스로 만들어놓고, 클래스를 이용해 비슷한 구성의 객체를 찍어내는 것이다. 위의 그림처럼 클래스에 객체에게 부여할 속성, 메소드를 정해놓고 객체마다 다른 속성값과 메소드 실행 방식을 정할 수 있다. 즉, 클래스는 기본 뼈대이고 인스턴스는 구체적인 "상태(변수)" 와 "행위(기능)"의 집합이라고 할 수 있다. 

https://whatisthenext.tistory.com/36

메소드(method)

메소드(method)란  클래스 (class) 내부에 정의된 함수 ( function)를 말한다. 즉 어떠한 특정 작업을 수행하기 위한 명령문의 집합이다. 입력값이 있을 때 그 값을 받아서 처리한 후 결과 값이 있으면 되돌려준다. 클래스 내부에 정의되어 있는 메소드는 객체 내에 저장된 데이터에 접근하고, 객체 간의 통신을 가능하게 한다. 예를 들어, 다음 메소드를 사용하여 a와 b의 합계를 구할 수 있다.

int add(int a, int b) {
    int c=a+b;
    return c;
    }

사용법

접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부
    // 구현부
}

1. 접근 제어자 : 해당 메소드에 접근할 수 있는 범위를 명시합니다.
2. 반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시합니다.
3. 메소드 이름 : 메소드를 호출하기 위한 이름을 명시합니다.
4. 매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시합니다.
5. 구현부 : 메소드의 고유 기능을 수행하는 명령문의 집합입니다.

 

Tip
하나의 클래스에 같은 이름의 메소드를 둘 이상 정의할 수 없다. 하지만 메소드 오버로딩(overloading)을 이용하면, 같은 이름의 메소드를 중복하여 정의할 수 있습니다. 메소드 오버로딩이란 매개변수의 개수나 타입을 다르게 하여 같은 이름의 또 다른 메소드를 작성하는 것이다. =>오버 로딩이란?

 

생성자(constructor)

클래스를 가지고 객체를 생성하면, 해당 객체는 메모리에 즉시 생성되는데 이렇게 생성된 객체는 모든 인스턴스 변수가 아직 초기화되지 않은 상태여서 자바에서는 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 생성자(constructor)라는 메소드를 제공한다. 자바에서 생성자(constructor)의 이름은 해당 클래스의 이름과 같아야 한다. 즉, Car 클래스의 생성자는 Car()가 됩니다.

객체 생성할 때 

클래스명 참조변수명; 
참조변수명 = new 생성자();
예) Student kim; 
kim = new Student();

또는 
클래스명 참조변수명 =new 생성자();  => 한줄로 표현가능 
예) Student kim = new Student();