Notice
Recent Posts
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

IT'S YU

[java] OOP 객체지향프로그래밍 본문

웹개발/Java

[java] OOP 객체지향프로그래밍

자석 2022. 4. 14. 10:29

객체지향 프로그래밍이란 객체를 이용하는 프로그래밍 방식

OOP (Object Oriented Programming)

* 개인의 학습(복습) 및 기록용으로 작성한 글입니다. 전문적인 정보와는 거리가 아주 멀 수도 있습니다.


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

▷ 추상화(Abstraction)

- 자료 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것이다. 자료 추상화를 통해 정의된 자료형을 추상 자료형이라고 한다. 추상 자료형은 자료형의 자료 표현과 자료형의 연산을 캡슐화한 것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있다. 객체 지향 프로그래밍에서 일반적으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체, 추상 자료형에서 정의된 연산을 메소드(함수), 메소드의 호출을 생성자라고 한다.

- 프로그램이 필요로 하는 실제 데이터들을 모델링(설계도)하는 기술

- 프로그램에서 필요로 하는 데이터와 데이터를 처리하기 위한 동작들을 정리하는 과정을 추상화라고 하며, 추상화 과정에서는 소스 코드의 구현이 아닌 데이터들의 객체화와 객체들 간의 관계에 대한 모델링 과정이 중요하다.

캡슐화(EnCapsulation)

- 객체의 속성(data field)과 행위(메소드, method)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉한다.

- 객체 지향의 가장 중요한 데이터 보호 기술

- 여러 자료형 변수들을 class영역 안에서 접근제한자 private을 사용하여 멤버변수(Field)로 선언하여 외부에서 클래스 내부의 데이터에 접근하지 못하도록 막는 것이 핵심이다. 클래스 내부의 데이터를 외부에서 접근하지 못하도록 설정함으로써 객체가 가진 데이터를 보호할 수 있게 되며, 이를 정보 은닉(Information Hiding)이라고 한다.

▷ 상속(Inheritance)

- 상속은 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다. 상속을 받는 새로운 클래스를 부클래스, 파생 클래스, 하위 클래스, 자식 클래스라고 하며 새로운 클래스가 상속하는 기존의 클래스를 기반 클래스, 상위 클래스, 부모 클래스라고 한다. 상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로써 객체를 조직화 할 수 있다.

- 클래스의 재사용과 소스 코드의 중복 제거를 목적으로 하는 기술

** JAVA에서는 다중상속을 지원하지 않는다.

 

▷ 다형성(Polymorphism)

- 다형성 개념이란 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩(같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것)이나 오버로딩(같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것)을 의미한다. 다형 개념을 통해서 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있다.

- 상속을 이용하여 여러 클래스 타입을 하나의 클래스 타입으로 다루는 기술

** 오버라이딩, 오버로딩의 전제 : 상속


용어 정리

▷ 클래스(Class)

- 객체를 만들기 위해 필요한 객체의 설계도. 자료형이 다른 변수들을 배열처럼 메모리에 연속 나열 할당하기 위한 순서를 지정하는 역할을 하며, 클래스 블록 { } 이 캡슐, 즉 보호막의 역할을 하여 객체 외부에서 멤버변수(Field)로의 접근을 제한하며, 멤버변소들을 하나의 타입으로 묶어 주는 것이 클래스이다.

- 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 한다. 객체 지향 프로그램의 기본적인 사용자 정의 데이터형(user defined data type)이다.

- JAVA에서는 모든 코드는 반드시 클래스 안에 존재해야 하고, 서로 관련된 코드들을 그룹으로 나누어 별도의 클래스를 구성 > 클래스들이 모여 하나의 JAVA 애플리케이션 구성

▷ 객체(Object), 인스턴스(Instance)

* 엄밀히 따지자면 다른 개념이지만, 동일하다는 가정하에 작성

- 추상화가 이루어진 클래스로부터 데이터가 존재하는 실체로 만드는 과정을 인스턴스화(Instantiation)라고 하며, 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(Instance)라고 한다. JAVA에서는 객체, 즉 인스턴스는 무조건 메모리 힙(Heap) 영역에 할당하도록 정하였으며 할당된 객체의 주소를 기록할 참조(Reference)변수를 사용하여 객체를 참조하도록 정해 두었다.

- 객체는 자신 고유의 속성(Attribute)을 가지며 클래스에서 정의한 행위(Behavior)를 수행할 수 있다. 객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용한다.

▷ 메소드(Method)

- 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 메시지라 할 수 있다. 메서드는 한 객체의 서브루틴(Subroutine)형태로 객체의 속성을 조작하는 데 사용된다. 또 객체 간의 통신은 메시지를 통해 이루어진다.

** Main (main method)

public static void main(String[] args) {}는 고정된 형태의 메소드 선언부로 JAVA Application을 실행하는데 필요한 메서드(프로그램 실행 시 java.exe.에 의해 호출됨) 모든 클래스가 main메소드를 가지고 있어야 하는 것은 아니지만 하나의 JAVA애플리케이션에는 main 메소드를 포함한 클래스가 반드시 하나는 있어야 함

▷ 접근 제한자(Access Modifier)

- 클래스에 속한 멤버변수(Field)와 멤버함수(Method) 들을 클래스 외부(다른 클래스)에서의 접근에 대한 제한을 걸기 위해 사용되는 단어

** 접근 제한자 종류

- (+)public : 외부 클래스가 자유롭게 사용할 수 있는 공개 멤버

- (#) protected : 같은 패키지 또는 자식 클래스에서 사용할 수 있는 멤버, 비상속시에는 default와 동일함.

- (-) private : 외부에서 사용할 수 없는 멤버(class 내부에서만 사용할 수 있는 멤버)

- default : 접근제한자가 적용되지 않은 멤버로 같은 패키지에 소속된 클래스만 사용 가능한 멤버