본문 바로가기

TIL

Day16(클래스,객체,인스턴스,객체 지향 )

class는 연관되어 있는 변수와 메소드의 집합으로 정의할 수 있습니다. 클래스는 일종의 설계도 입니다.클래스를 만든다는 것은 사용자 정의 데이터 타입을 만드는 것과 같은 의미다. 클래스를 정의하는 것 자체로는 많은 일을 할 수 없습니다. 설계도를 가지고 구체적인 제품을 만들어야 하는데 이때 사용하는 키워드가 new입니다.

Calculator a1 = new Calculator();

Calculator라는 변수를 새로 만들어서 a1이라는 변수에 담았는데 그 변수는 Calculator라는 객체를 담을 수 있는 형식을 가지고 있는 변수입니다.

Calculator의 실제 데이터를 담고 있는 a1을 인스턴스라고 합니다. 즉 인스턴스는 구체적인 객체입니다.

 

c1이라는 변수는 Calculator라는 객체를 담을 수 있는 컨테이너입니다. 다른 말로는 Calculator는 데이터타입입니다. 

우리가 객체를 만든다는 말은 데이터타입을 우리가 직접 만든다는 말과 같습니다.

객체 또는 클래스를 만든다는 것은 어떻게 보면 사용자 정의 데이터 타입을 우리가 만드는 것이라는 의미를 시스템 내부적으로 갖게됩니다.

 

객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신과 다른 것을 식별 가능한 것 입니다. 우리가 객체를 만들어서 사용하는 이유는 재활용성을 높이기 위해서입니다.

 

Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sum();       
c1.avg();       
 
Calculator c2 = new Calculator();
c2.setOprands(20, 40);
c2.sum();       
c2.avg();

위의 코드를 보면 두개의 인스턴스를 각각 c1과 c2에 담았습니다. 그리고 각각의 인스턴스에 소속된 메소드를 호출하고 있습니다. 각각의 인스턴스는 메소드 setOprands를 통해서 변수 left, right의 값을 설정하고 있습니다. 그 결과 인스턴스 C1과 C2는 아래와 같이 서로 다른 변수의 값을 내부적으로 가지고 있게 됩니다.

public void setOprands(int left, int right){
    this.left = left;
    this.right = right;
}

이 때 메소드 setOprands 내에 this.이라는 것이 있습니다. this는 클래스를 통해서 만들어진 인스턴스 자신을 가리킵니다. 위의 코드에서 left는 매개변수이고 이 변수는 setOprands 밖에서는 접근 할 수 없습니다. 반면에 this.left는 4행에서 선언한 변수에 값을 설정하는 것이고 메소드 밖에서 선언한 변수는 인스턴스 내의 모든 메소드에서 접근이 가능합니다.

 

this.은 c1이 담겨 있는 Calculator라는 클래스를 구체적인 제품으로 만든 인스턴스를 가리키는 것이고,

.이 안붙은 left는파라미터 즉 매개변수 값이 들어오게 됩니다.

c1과 c2는 동일한 클래스를 통해서 만들어진 구체적인 제품이기에 메소드(동작)는 동일합니다. 그러나 가지고 있는 변수(상태)는 다릅니다.

변수(상태)가 다르다는 말은 데이터가 다르다는 말입니다. 즉 하나의 클래스를 바탕으로 서로 다른 상태를 가진 인스턴스를 만들면 서로 다른 행동을 하게 된다는 것을 알 수 있습니다. 이 처럼 하나의 클래스가 여러개의 인스턴스가 될 수 있다는 점이 가장 기본적인 재활용성이라고 할 수 있습니다.

 

 

객체 지향의 객체를 하나의 작은 프로그램이라 생각해봅시다. 프로그램 안에 객체라는 작은 프로그램을 만드는 것 입니다. 객체들을 조금 쌓아 안전하고 웅장한 프로그램을 만드는 것이 객체 지향이 추가하는 바 입니다.

'TIL' 카테고리의 다른 글

Day18  (0) 2023.02.20
Day17(클래스 멤버와 인스턴스 멤버)  (0) 2023.02.18
Day15(static)  (0) 2023.02.16
Day14(Layout)  (0) 2023.02.15
Day13  (0) 2023.02.13