나는매일가운데

JAVA 기초 (4) : OOP (객체 지향 프로그래밍)의 개념 본문

for JAVA/JAVA 기초

JAVA 기초 (4) : OOP (객체 지향 프로그래밍)의 개념

전로찡 2023. 1. 5. 17:52
반응형

1. 용어 정리

  • OOP (Object-Oriented Programming) : System상으로 옮기는 방법론
  • OOPL (Object-Oriented Programming Language) : OOP를 지원하는 프로그래밍 언어.  
  • 객체 (Object) : Real world의 모든 것들. 즉, Real world에서 System상으로 옮기는데 표현되는 모든 것들을 객체라고                            한다. 객체는 식별성을 가지고 있고, 상태와 행위가 있다.
  • Instance : 객체의 특징을 구현한 것.
  • Class : 객체의 공통된 특성, 행위, 관계 등을 모아놓은 집단 => 객체를 추상화하여 표현/정의한것 / 객체를 생성하는                틀
Application Class main을 가지고 있기 때문에 실행이 되는 Class
Bean Class (=Object Modeling Class) main을 가지고 있지 않기 때문에 실행이 되지 않으며, 객체를 표현한 Class
Filed Class에 표시되는 객체의 상태나 속성 정보, 객체의 골격
Method Class에 표시되는 객체의 행위를 말하며, 이후 Application에서 사용될 함수들을 Method라고 한다.
  • 추상화 (Abstraction) : 객체지향의 원리이며, 각 개체들의 공통적인 특징들을 모아 추출하여 Class로 묶는 행위를 말한다. 또한 System의 관점에 따라 추출해야되는 공통적인 특징들이 달라지기 때문에 System에 의존적이다. 
  • Generalization / Specialization : class의 filed에서 공통된 부분이 많을 수록 일반화 (추상화 수준이 높다)고 하고, 공통된 부분이 적을 수록 '구체적이다' 라고 한다. 이로 인해 계층화가 이루어진다.
  • Field : 객체의 attribute이며 정적인 상태 (static 하다)
  • Method : 객체가 하는 행위 (behavior)이며 동적인 상태이다. (Dynamic 하다.)

 

2. 객체지향 프로그래밍의 기본 원리

- 쉽게 말해서, RW에서 System상으로 옮기는 프로그래밍이다. 가장 중요한 개념은 추상화, 캡슐화, 다형성, 계층화이다.

 

 

(1) 추상화 (Abstraction)

 - 객체들의 공통적인 특징들을 추출하여 묶는 행위.

 - 어떤 System을 구성할것인가에 따라 관점이 달라지고 이에 추출할 정보가 달라진다 (문제 영역에 의존적이다.)

 - 객체지향에서 가장 중요한 개념이다. 

 

(2) 캡슐화 (Capsulation) 

 - Class의 정보를 은닉하는 행위

 - 사용자가 물을 때만 정보를 공유할 수 있게 한다.

 

(3) 모듈화

 - 아직 공부 안했습니다...ㅜㅜ

 

(4) 계층화 (Hierarchy)

 - 추상화 정도에 따라 개념적으로 큰 class (상위 class)와 작은 class(하위 class)가 생성이 되고, 하위 클래스가 상위클래스의 정보를 참조하는 형태이다. 상위로 갈수록 추상화 수준이 높아지고, 하위로 내려갈수록 구체적이다.

 - 이에 따라 ~ is a ~ 관계가 성립이 된다.

 - 상위 클래스는 하위 클래스를 대신할 수 없고, 하위 클래스는 상위 클래스를 대신할 수 있다. 

      => Data Type이 다르기 때문 (묵시적 형변환이 적용됨) Reference data type의 경우 byte 수가 아닌 개념적으로 큰 쪽               으로 변환된다.

 ex) 개념 (동물 > 사자)  => 사자는 동물이 될 수 있지만, 동물은 사자가 될 수 없다.

 

 - class 간 관계 형성이 가능해지고, 이는 정보의 공유를 통해 공통 부분을 효과적으로 관리할 수 있다. 일관성을 보장한다.

 

 

(5) 다형성 (Polymorpism)

 - 주요 개념은 Method Overloading

 - Overloading 이란, is a 관계를 형성할 수 있음에 따라 보장 되었다. 

 - 이는 Method의 이름은 동일하나, 그 Method를 통해 다양한 기능을 활용할 수 있다.

 

3. 객체지향의 기본개념

(1) 객체 (Object)

 - 현실세계의 모든것들 (사물, 사물의 특징, 행동, 습관, 구조 등등)

 - 각자의 identifier가 존재한다. -> 식별성을 갖는다.

 - 시간 혹은 행위에 따라 객체의 상태가 변한다. (동적인 상태)

 

(2) 클래스 (Class)

 - 추상화를 통해 객체들의 공통된 특성, 행위, 관계, 의미를 가지고 있는 집단

 - class를 통해 Instance 생성과 객체생성이 가능하다.

반응형