본문 바로가기

JAVA/OOP

클래스와 객체

반응형

클래스의 개념과 특성


클래스는 명세 장치이다.

- 여러 유사 객체들이 공통적으로 갖는 속성이나 행위를 기술하는 명세 장치로 볼 수 있다.


클래스의 특성

1.클래스는 고유한 이름을 지닌다.

- 특정 도메인에서 클래스가 중복될수 없기 때문에 클래스도 다른 클래스와 구별되기 위한 고유한 이름을 갖는다.

- 특정 도메인에서 클래스를 추출하여 표현할 때는 이름이 중복되거나 이름이 다른데 의미가 동일한 클래스가 존재해서는 안된다.


예) 고객클래스와 회원클래스 의미가 동일하기때문에 둘 중 하나만 선택



2.클래스는 속성을 지닌다.

- 클래스는 의미 있는 정보 저장소 역할을 하기 위해서 속성을 내포한다.

- 속성을 상태변수, 멤버 변수, 멤버 데이터 등으로 표현

예) 고객 클래스의 속성으로 '아이디', '비밀번호', '이름'


3. 클래스는 잘 정의된 행위를 지닌다.

- 행위를 구현 관점에서 표현하면 메서드, 멤버함수

- 클래스가 내포하고 있는 속성들을 사용하여 처리하는 기능


예) 회원가입, 회원정보 수정



클래스와 객체


1. 클래스는 틀이고, 객체는 실 사례이다.

- 클래스 대신 객체타입(Object type)이라는 용어를, 객체 대신 인스턴스(Instance)라는 용어를 사용하기도 한다.

- 클래스는 객체들의 공통된 속성과 행위를 기술하는 명세 장치


2. 클래스는 상태를 갖지 않지만, 객체는 상태를 갖는다.

- 클래스와 객체 모두 내부적으로 속성을 내포하고 있다.

- 클래스는 속성에 대한 선언만 내포

- 객체는 선언된 각 속성들에 대한 값을 지닌다.(값을 객체의 상태라고 표현)

예) 학생클래스, A학생 객체, B학생 객체

- 예외적으로 클래스가 상태 값을 갖는 경우

예) 주문건수 속성은 주문클래스에 관리해야 하는 속성으로 주문클래스로부터 주문 객체들이 생성될 때 마다 주문이 발생할 때의 몇건의 주문이 발생했는지를 관리하는 속성으로 정적변수로 선언

주문클래스에서 '주문번호', '주문일자', '주문금액' 등은 객체별로 해당 객체내 존재해야할 속성으로 동적변수


3. 클래스와 객체는 동일한 속성 및 메서드 수를 갖는다.

- 한 클래스로부터 생성되는 객체들의 속성이나 메서드 수는 동일



UML에서의 클래스 모델링


속성

가시성(Visibility), 속성명, 데이터 타입순으로 표시


가시성

+public : 해당클래스의 모든 정보를 공개

예) +productName:String

-private : 해당클래스의 정보를 외부에 공개하지 않고 내부에서만 사용

예) -productId:String

#protected : 상속받은 서브 클래스에게만 공개하고 외부에는 공개 하지 않는다.

예) #amount:float


속성명 

-유일한 속성명을 가져야한다.

데이터 타입

-기본데이터 타입이나 객체 타입으로 정의


행위(함수)

가시성, 행위명, 매개변수, 데이터 타입순으로 표시


가시성

public(+), private(-), protected(#), friendly(~)


행위명

동사형태로 정의하여 기능에 대한 명확성

예) addItem

+processOrder( orderId:String)


매개변수

매개변수명: 데이터타입, 매개변수명: 데이터 타입


데이터타입

반환값에 대한 데이터 타입으로 함수가 처리된 후에 처리결과를 반환경우 반환값에 대한 데이터 타입을 표기


+processOrder( orderId:String) : Boolean

+processOrder( orderId:String, userId: String)



클래스 간의 관계표기법

UML 클래스 다이어그램의 연관(Association), 포함(Aggregation, Composition), 상속(Inheritance) 관계를 표기


연관관계

클래스 들 간에 요구하는 행위를 사용하는 관계를 의미


클래스 1 -----------------> 클래스 2 


클래스 1 <----------------- 클래스 2


클래스 1 ------------------ 클래스 2


자바 클래스 구현


가시성, class예약어, 클래스명, 중괄호{}

public class Product {

}


속성

데이터 타입을 정의한 후에 속성명의 초기값을 정의


public class Product {

String productId;

int price = 0;

Delivery deliveryType;

}


행위(함수)

public class Product {

String productId;

int price =0;


public void addProduct(String productId){


}


public Boolean deleteProduct(String productId) {


return true;

}

}



연관관계


Order

-orderId:String

+processOrder(orderId:String)




ShoppingCart

-cartId:String

+getItem(cartId:String):Product[]



public class Order {

String orderId;


public void processOrder(String orderId) {

ShoppingCart sCart = new ShoppingCart();

Product[] product = sCart.getItem(orderId);

}

}


public class ShoppingCart {

String cartId;


public Product[] getItem(String cartId) {


}

}


Order 클래스의 processOrder 행위에서 ShoppingCart 클래스의 getItem 행위를 호출하여 두 클래스 간의 연관관계를 구현

ShoppingCart 클래스는 Order클래스의 속성 데이터로 객체를 생성하지 않고 Order 클래스의 processOrder 내에 함수의 변수로 정의하고 있다.


클래스를 어디서 선언하느냐에 따라 연관계관계가 될수도 있고 포함관계가 될 수 있다.


연관관계

public class Order {

public void processOrder(String orderId) {

ShoppingCart sCart;

}

}


포함관계

public class Order {

ShoppingCart sCart;


public void processOrder(String orderId) {


}

}



객체의 개념과 특성


객체개념

소프트웨어 객체에 대한 정의보다는 실세계 도메인에서 표현하는 객체에 대한 정의

- 객체는 물리적 사물 또는 논리적 개념이다.


구현관점에서 정의

- 객체는 모듈이다.


추상화단위로서의 정의

- 객체는 캡슐화와 정보은닉의 도구(장치)이다.


객체의 특성

- 객체는 유일한 식별자를 가져야한다.

- 객체는 상태를 가져야한다.

- 객체는 잘 정의된 함수를 가져야 한다.


객체의 생명주기

- 실제 객체지향 소프트웨어의 실행에 있어서 실행의 주체 단위는 클래스가 아니라 객체이다.

- 객체지향 프로그램에서 가동되는 단위는 객체이며 메모리에 방을 차지하는 것도 객체이다.

- 서로 메시지를 주고 받는 단위도 객체이다.

- 클래스는 객체들을 생성할 수 있는 기반을 마련해주는 틀이라는 것이다.


객체 생성과정을 통해 클래스로부터 객체가 메모리의 특정주소에 공간을 확보하며 존재하게 된다.

이러한 생성된 이후에 객체들의 상태가 변경이 되기도 하고 메시지 전송읕 롱해 서로 다른 객체들 간에 정보를 주고받고 상호작용을 하게 된다.객체가 더이상 사용될 필요가 없을 때 메모리로부터 제거된다.


객체생성

- 객체선언이 이루어진다.

- 객체 인스턴스화가 이루어진다.

- 객체 상태 초기화가 이루어진다.


객체사용

- 생성된 객체는 객체명을 통해 사용.

- 객체명을 통해 클래스가 보유하고 있는 속성(데이터)이나 함수를 사용


소멸

- 생성된 객체는 소멸자(Destructor)을 통해 소멸

- C++에서는 객체소멸을 위해서 객체 소멸자를 호출

- Java 가비지 컬렉터(GC)에 의해 자동 소멸



출처-UML과 JAVA로 배우는 객체지향 설계 및 구현

반응형

'JAVA > OOP' 카테고리의 다른 글

상속  (0) 2018.04.17
복합객체  (0) 2018.04.17
메시지  (0) 2018.04.16
캡슐화와 정보은닉  (1) 2018.04.13
소프트웨어 개발 패러다임과 객체지향  (0) 2018.04.13