객체지향 책을 보고 정리 하는중입니다.

객체 지향은 인간 지향이다.

기계 종속적인 개발이 아니라 우리가 눈으로 보고 느끼고, 생활하는 현실 세계처럼 프로그래밍 할 수는 없을까? 라는 고민 속에서 객체 지향의 개념이 탄생했다.

함수로 인해 프로그래밍이 조금 편해지고 더욱 파격적인 제안이 나옴, 그게 바로 객체 지향이다.

객체 지향은 직관적이고 쉽고, 인간적이다는 증거를 이제부터 하나씩 알아보자

객체 지향의 4대 특성 - 캡! 상추다

캡 - Encapsulation, : 정보 은닉

상 - 상속(Inherit) : 재사용

추 - 추상화 (Abstraction): 모델링

다 - 다형성 (Polymorphism): 사용 편의

객체 지향에 대한 질문

  • 사람의 나이는 몇 살인가?

  • 김연아의 나이는 몇 살 인가?

  • 뽀로로의 나이는 몇 살인가?

  • 펭귄의 나이는 몇 살인가?

클레스: 객체 = 사람: 김연아 = 펭귄 : 뽀로로

추상화

추상 : 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용

공통 특성 / 공통 속성 추출

객체 지향의 추상화는 곧 모델링이다 라는 관점을 살펴보자

객체 지향의 4대 특성들은 클래스를 통해 구현된다.

객체는 세상에 존재하는 유일무이한 사물로 해석을 하고, 클래스는 분류, 집합. 같은 속성과 기능을 가진 객체를 총칭하는 개념 이라고 하면

사람 morris = new 사람();class Person {
String name;
int age;
int numberOfLeg ;
public void eat(){
System.out.println("냠냠");
}
}

public class ObjectMain{

public static void main( String []args){
Person morris = new Person();
morris.name = "Kim Morris";
morris.age = 29;
morris.numberOfLeg = 2;
}
}

참고할점은 사람의 다리는 전부 2개 이기 때문에, heap에 메모리를 줄여주기 위해서 static으로 변경하여 Static 영역에 배치 하게 하면 더 좋은 효과를얻을수 있다.

새로운 인스턴스(객체)를 생성하게 되면 또다른 참조변수를 만들고 heap에 Person 클래스를 다시 힙에 배치

자바에서는 포인터가 객체 참조변수에 할당된다는 사실 !!

Heap : Person의 인스턴스를 하나 만들어 heap에 배치 한다.

Stack : Person 객체에 대한 참조 변수 morris를 만든다.

Static : Person class의 String name, int age, int numberOfLeg, eat() 클래스가 전부 스태틱 영역에 배치 됨

아래와 같이 Person 클래스가 있을 경우, 객체를 생성하게 되면 메모리의 구조는 아래와 같다.

메모리는 ??

자바는 객체 지향의 추상화를 어떻게 지원을 할까? 바로 class 키워드를 통해 지원한다.

  • 상속을 통한 추상화, 구체화

  • 인터페이스를 통한 추상화

  • 다형성을 통한 추상화

추상화의 개념을 넓게 본다면 아래 내용도 포함된다.

  • OOP의 추상화는 모델링이다.

  • 클래스 : 객체 = 펭귄 : 펭수

  • 클래스 설계에서 추상화가 사용된다.

  • 클래스 설계를 위해서는 애플리케이션의 경계부터 정해야한다.

  • 객체지향에서 추상화의 결과는 클래스이다.

추상화에 대한 핵심을 다시 정리 해보면

추상화란 구체적인 것을 분해해서 관심 영역에 있는 특성만 가지고 재조합하는 것 => 모델링

추상화란 구체적인 것을 분해해서 관심 영역에 대한 특성만 가지고 재조합하는 것

추상화의 일반적인 뜻을 다시 살펴 보면

병원에 대한 애플리케이션이면 병원에는 환자라는 구체적인 사람으로 바꿀 수 있고, 설계도 달라질 것이다.

이럴때 내가 만들고자하는 애플리케이션은 어디에서 사용될 것인가? 를 질문을 하면된다.

여기서 애플리케이션 경계라는 것이 나오는데, 애플리케이션 경계를 Context라고 부르기도한다.

사람에 대한 클레스에 대해 공통적인 특성들을 나열하다보면 끝이 없다.

'ProgramLanguage > Java' 카테고리의 다른 글

Lambda_Expression(2)  (0) 2020.01.25
객체 지향 설계 5원칙 - SOLID  (0) 2019.12.26
Java jar파일 만들기  (0) 2019.08.04
인터페이스와 추상클래스  (0) 2019.06.10
람다 식 Lambda Expression (1)  (0) 2019.06.09

+ Recent posts