2022.09.26-02WIL(2)

SUADI·2022년 10월 2일
0

[1] 객체

{1} 객체의 의미

객체지향프로그래밍은 Object Oriented Programming의 약자이다. 말그대로 객체를 지향하고 있는 프로그래밍이라는 의미이다. 객체를 지향한다는데 객체란 무슨 의미일까? 영어로는 Object. 물체라는 의미이다. 근데 우리가 알고 있는 물체라는 단어의 의미와 객체의 의미는 비슷한듯 다르다.

객체는 어떠한 사물을 지칭하기도 하지만 추상적인 무언가를 의미하기도 한다. 예를 들면 물건 주문, 학교 강의 등과 같은 물건이 아닌 것도 객체가 될 수 있다. 수많은 객체들은 공통적인 특징이 있다. 객체마다 이름, 색깔, 시간 등의 속성을 가지고 있고, 걷다, 보다, 실행하다 등의 기능이 존재한다.

속성과 기능을 정의해 놓은 집합체를 클래스라고 부른다. 클래스를 잘 만들어놓으면 내가 원하는 입맛대로 인스턴스를 생성해서 활용할 수가 있게 된다.

객체지향세계에서는 속성을 멤버변수 또는 Field 라고 정의하고, 기능을 method라고 정의한다. 멤버변수 또는 Field를 이용해서 클래스가 가지고 있는 특징을 정의하고, 메서드를 생성해서 클래스가 수행하고자 하는 기능을 만들 수 있다.

각 객체는 개별적으로도 사용이 가능하지만, 다른 객체와 관계를 맺고 사용할 수 있다는 점에서 OOP의 장점이 되기도 한다. 객체들의 관계는 집합관계, 사용 관계, 상속 관계가 있으며 예를 들어 자동차 클래스에는 바퀴 클래스, 엔진 클래스 등이 집합관계(HAS-A)이고, 운전자, 기사 등이 사용 관계, 트럭, 오토바이, 중형차 등이 상속 관계(IS-A)이다.

{2} 클래스의 구성 요소

클래스에는 위에 언급했듯이 필드와 메서드, 그리고 또 하나 생성자가 있다.

class Sample {
	// field
	private int field1;
    private String field2;
    private static int field3;

    // constructor
    public Sample(String field2) {
    this.field2 = field2;
    }
    
    public Sample() {
    	this(field2 = "샘플)
    }
    
    // method
    publc int getField1() {
    	return field1;
    }
    
    public void setField1(int field1) {
    	this.field1 = field1;
    }
}

(1) 필드

필드, 즉 멤버 변수는 클래스 변수와 인스턴스 변수로 나뉜다. 클래스 변수는 static이 붙은 변수로써, 인스턴스 전체가 공유하는 변수이다. 예를 들어 자동차에 id값을 부여하고 싶을 때 인스턴스 변수를 사용해서 생성자를 통해 초기화를 시키면 인스턴스 별로 메모리 영역이 따로이기 때문에 모두 id값이 같아진다. 반면, 클래스 변수는 각 인스턴스마다 다른 id값을 갖게 할 수 있다.

(2) 생성자

생성자는 인스턴스를 만들기 위한 메서드라고 볼 수 있다. 생성자 없이는 인스턴스를 생성하지 못한다. 생성자의 역할은 인스턴스를 생성할 때 초기화를 담당한다. 생성자 내에 필드를 초기화 할 수 있다. 생성자 내에 인스턴스 변수를 초기화하는 경우, 자기 자신의 필드를 호출한다는 의미로 this를 사용한다.

생성자는 오버로딩이 가능해서 생성자의 매개변수를 달리 받을 수 있다. 이 경우, 기본 생성자는 컴파일러가 자동으로 추가해 주지 않기 때문에 기본 생성자가 필요한 경우 따로 작성해 줘야한다.

(3) 메서드

"1" 오버로딩

메서드 오버로딩은 같은 이름의 메서드를 여러개 선언하는 것이다. 메서드 오버로딩의 조건은 리턴 타입, 매개변수 타입, 개수 중 하나가 달라야 한다. 오버로딩의 대표적인 예는 println 메서드이다. 어떤 타입의 변수를 println으로 출력해도 똑같이 출력이 된다. 이는 다양한 타입을 매개변수로 받아 오버로딩을 해놨기 때문이다.

"2" 오버라이딩

오버라이딩은 상속관계에서 부모 클래스에서 정의한 메서드를 바디만 다르게 재정의해서 사용하는 것이다. 오버로딩과 혼동하기 쉬운데 오버로딩은 같은 이름의 메서드를 새로 만든다는 의미라면 오버라이딩은 같은 메서드를 수정해서 사용한다고 볼 수 있다.

0개의 댓글

관련 채용 정보