09-1 객체지향 프로그래밍

KIHYUK MOON·2023년 1월 12일
0
post-thumbnail

객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체 지향 프로그래밍(OOP: Object-Oriented Programming)이라고 한다

객체의 상호작용

객체란 자신의 속성을 가지고 있으면서 식별 가능한 것을 말한다. 객체는 속성과 동작으로 구성되어 있으며, 자바는 이를 각각 필드(field)와 메소드(method)라고 부른다.

객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용하면서 동작한다. 객체들 사이의 상호작용 수단을 메소드라고 한다. 객체의 상호작용은 객체 간의 메소드 호출을 의미한다.

객체 간의 관계

객체는 대부분 다른 객체와 관계를 맺고있다. 종류는 집합 관계, 사용 관계, 상속 관계가 있다.

  1. 집합 관계 : 집합 관계에 있는 객체는 하나는 부품이고 하나는 완성품에 해당한다. 자동차로 비교하면 자동차는 엔진, 타이어 등으로 구성되어있으므로 자동차와 이 부품들은 집합관계로 볼 수 있다.

  2. 사용 관계 : 객체 간의 상호작용을 의미. 사람과 자동차를 예로들어, 사람은 자동차를 사용할 때 달린다, 멈춘다 등의 메소드를 호출한다.

  3. 상속 관계 : 상속 관계는 상위 객체를 기반으로 하위 객체를 생선하는 관계를 말한다(부모, 자식). 자동차를 예로 들어, 자동차는 기계의 한 종류이니까 기계와 자동차는 상속관계에 있다고 할 수 있다.

객체와 클래스

무언가 프로그래밍 하고 싶을때 필요한 설계도가 클래스라고 보면 된다.
클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.

클래스로부터 만들어진 객체를 해당 클래스의 인스턴스 라고 한다. 그리고 클래스로부터 객체를 만드는 과정을 인스턴스화라고 한다.
하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있다. 동일한 설계도로 여러 대의 자동차를 만드는 것을 예로 들 수 있다.

클래스 선언

사용하고자 하는 객체를 구상했다면 그 객체의 대표 이름을 하나 결정하고 이것을 클래스 이름으로 정한다. 이때 클래스 이름은 자바의 식별자 작성 규칙에 따라서 만든다.

식별자 생성 규칙

  1. 하나 이상의 문자로 이루어져야 한다.
  2. 첫 글자에는 숫자가 올 수 없다.
  3. '$', '_' 외의 특수 문자는 사용할 수 없다.
  4. 자바 키워드는 사용할 수 없다. ex) int, for (x)

클래스 이름은 한글도 가능하지만 사용하는 경우가 거의 없다. 자바언어는 대소문자를 각자 다른 문자로 취급하기 때문에 클래스 이름도 대소문자를 구별한다.
서로 다른 단어가 혼합된 이름을 사용한다면 Camel 표기법 을 사용한다.

객체 생성과 클래스 변수

클래스로부터 객체를 생성하려면 new 연산자를 사용하면 된다.
new 연산자 뒤에오는 생성자는 '클래스()' 형태를 가지고 있다. 이때 생성된 객체는 힙 영역에 생성된다.

클래스 변수 = new 클래스();
ex)
Member member = new Member();

클래스는 하나지만 new 연산자를 사용한 만큼 객체가 메모리에 생성된다.

ex)

Student s1 = new Student();
Student s2 = new Student();

위에 생성된 객체들은 Student 클라스의 인스턴스 이다.

클래스의 구성 멤버

클래스에는 객체가 가져야 할 구성 멤버인 필드(Field), 생성자(Constructor), 메소드(Method) 가 있다. 이 구성 멤버들은 생략되거나 복수의 개수로 작성될 수 있다.

public class ClassName {
	int fieldName; // 필드
    
    ClassName() {} // 생성자
    
    void methodName() {} // 메소드
    }

필드

객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳. 생성자와 메소드 전체에서 사용된다.

생성자

new 연산자로 호출됨. 객체 생성 시 초기화를 담당. 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고 리턴 타입이 없다.

메소드

객체의 동작을 담당. 객체간의 데이터를 전달하는 수단이다.

profile
개발자 전직중..

0개의 댓글