IT world

객체지향 프로그래밍(OOP) 본문

코딩/Java

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

엄킹 2019. 11. 27. 17:23


객체 지향 프로그래밍




1. 객체란?


객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 다른 것과 식별 가능한 것을 말한다.  그냥 객체는 우리의 일상 속에서 우리가 아는 모든 것으로 생각하면 될 것이다, 예를 들어 컴퓨터, 책상, 자동차, 사람, 의자 등등 물리적으로 존재하는 것 모두가 객체이며 또한 보고 만지고 느끼는 것 외에도 날씨정보, 인간관계, 비행시간, 생각, 관념, 추상적인 학과, 강의 등등 모든 것이 객체가 될 수 있다.


객체는 존재하는 , 존재하지 않는 것들 중 자신만의 속성을 가지고 있는 것으로 생각하면 될 것이다.


객체는 정적인 요소 속성과 동적인 요소 동작으로 구성되어 있다. 자바에서는 속성과 동작들을 각각 필드(field)와 메소드(method)라고 부르며 각각의 객체들은 독립적으로 존재하며 다른 객체와 구분된다 




-객체의 상호작용 


현실 세계에서 일어나는 모든 현상은 객체와 객체 간의 상호작용으로 이루어져 있다. 예를 들어 사람은 전자계산기의 기능을 이용하고 전자계산기는 계산결과를 사람에게 알려주는 상호작용을 한다.


소프트웨어도 마찬가지로 객체들은 독립적으로 존재하며 다른 객체와 서로 상호작용하면서 동작한다. 

객체들 사이의 상호작용 수단은 메소드이며 객체가 다른 객체의 기능을 이용하는 것이 메소드 호출이다.


객체 지향 프로그래밍(OOP: Object Oriented Programming)은 만들고자 하는 완성품인 객체를 모델링하고, 집합관계에 있는 부품 객체와 사용관계에 있는 객체를 하나씩 설계한 후 조립하는 방식으로 프로그램을 개발하는 기법이다.










2. 객체 지향 프로그래밍의 특징


* 캡슐화(Encapsulation)

캡슐화란 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것을 말한다. 외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다.

필드와 메소드를 캡슐화하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는데 있다. 


예를 들어 TV의 중요한 부품이 바깥으로 노출되어 있다면 사용자의 실수로 고장날 수도 있다. 이런 중요부품은 TV안쪽으로 캡슐화하여 숨겨두어야한다. 캡슐화된 멤버를 노출시킬 것인지 숨길 것인지를 결정하기 위해 접근 제한자를 사용한다. 접근 제한자는 객체의 필드와 메소드의 사용 범위를 제한함으로써 외부로부터 보호한다.


private으로 변수를 캡슐화하였고 캡슐화된 데이터에 접근하기 위해서는 getter setter를 이용해야한다.

setter는 반환타입이 없고 대신 매개변수를 받아 필드에 해당 값을 전달한다.(void)

getter는 반환타입을 사용하며 캡슐화된 데이터를 반환한다.(타입 지정)


[캡슐화 예제]




[출력 결과]






* 상속(Inheritance)

일반적으로 상속은 부모가 가지고 있는 재산을 자식에게 물려주는 것을 말한다. 객체지향프로그래밍에서도 부모 역할의 상위 객체와 자식역할의 하위 객체가 존재하며 상위 객체는 자기가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 해준다.


상속은 하위 객체가 상위 객체의 모든 특성(속성과 행동)을 이어받는 것을 말한다.


상속은 상위 객체를 재사용해서 하위 객체를 쉽고 빨리 설계할 수 있도록 도와주고, 이미 잘 개발된 객체를 재사용해서 새로운 객체를 만들기 때문에 반복된 코드의 중복을 줄여준다.


예제를 보면 Animal class 와 Dog class 가 존재하며 Dog는 Animal을 상속하고 있다.

main에서는 Dog만으로 새로운 객체를 만들었으며 Animal의 메소드인 animal()이 출력되고 있는 것을 확인함으로써 상속되고 있음을 보았다.



[상속 예제]



[출력 결과]






* 다형성(Polymorphism)

같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 같은 자료형에 여러 가지 서로 다른 객체를 대입하여 다양한 결과를 얻어내는 성질이다


다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다.


다형성은 상호 관련된 객체들을 동일한 방식으로 다루는 개념을 말한다.


자바는 다형성을 위해 부모 클래스 또는 인터페이스의 타입 변환을 허용한다. 부모 타입에는 모든 자식객체가 대입될 수 있고 인터페이스 타입에는 모든 구현 객체가 대입될 수 있다. 


예제를 보면 클래스가 서로 상속관계에 있을 때 부모 클래스 타입으로 자식클래스를 참조 할 수 있도록 할 수 있다.

이렇게 하나의 타입으로 여러가지 객체를 참조할 수 있어 다양한 기능을 사용할 수 있다.



[다형성 예제]



'코딩 > Java' 카테고리의 다른 글

Java 상속  (0) 2019.11.28
Java 클래스  (0) 2019.11.28
Java - 참조타입1  (0) 2019.11.27
Java란  (0) 2019.11.25
Java - 정수와 실수  (0) 2019.03.14
Comments