안녕하세요 성조입니다.
객체지향 언어의 대표적 언어가 자바여서 자바를 예로 들었습니다.
따로 소스코드를 작성하지 않았고 개념적 접근으로 글을 작성하고 싶어서 위키백과를 참조하여 작성했습니다.
첫 줄에는 사전적 의미.
=>의 경우 개인이 작성한 부연 설명입니다.
추상화 - 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.
=> 우리는 이 추상화 개념을 이용해서 객체에 있는 특징을 클래스화 한다.
즉, 처음부터 객체가 무엇인지 알아야 그 객체의 특징을 종합해서 클래스를 생성하는 것이라서 추상화 개념을 알고 있어야 클래스와 객체를 이해하기 쉽습니다.
붕어빵 틀이 클래스고 붕어빵이 객체라는 설명을 많이 있습니다.
붕어빵 틀을 만들기 위해서는 붕어빵이 어떻게 생긴 것인지 또 어떤 특징들을 갖고 있는 것인지 알아야 틀을 만들 수 있습니다. 그래서 클래스를 만들기 위해서는 객체를 추상화하여 알아야 한다는 것이다.
붕어빵이라는 객체를 만들기 위해서 그 틀에 필요한 특징들을 정리한 것이 붕어빵 틀 => 클래스를 정의하는 것이다.로 보면 된다.
클래스 설명으로 이어서 접근해보자.
클래스 - 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀이다.
=> 우리가 객체를 현실로 보면 조금 더 좋을 것 같은데 무형과 유형의 물건이 있습니다. 그 물체에 대한 추상화 과정으로 특징을 추출하여 하나의 틀로 종합하여 만드는 것이 클래스.
즉, 붕어빵 틀을 만들기 위해서 붕어빵을 만드는 방법을 알아야 하는 것이다.
유/무형의 실제 존재하는 객체의 개념적 특징을 추출하여 하나의 틀을 추상화 과정을 통해서 만들어 내는 것. 정도로 이해가 되면 좋겠다.
객체 - 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미. 그러나 메모리가 할당되기 전까지 객체는 존재하지 않는다.
=> 프로그래밍 언어에서는 변수라고도 사용되는데 변수를 선언만 한 경우 우리는 메모리 영역에 값을 할당하지 않은 것까지가 객체이다.
선언한 변수에 대하여 값을 대입하는 경우가 인스턴스 값을 생성하였다.로 정의하면 될 것 같다.
객체의 일반 사전적 접근의 경우 위에서 언급한 것과 같이 유/무형의 실제 개념적으로 정의된 것이다.
공학적 접근으로는 속성, 특징들을 표현하는 것 정도로도 된다.
인스턴스 - 위의 객체에 대한 설명 중 메모리에 할당되어 실체가 생성된 것이 인스턴스이다. 즉, 객체가 존재하게 되는 것이 인스턴스이다.
=> 메모리가 off된 상태의 객체를 on 된 상태의 객체로 바꿔주는 것.
그러므로 인스턴스는 메모리를 할당한다. = 실제 값을 갖게 된 객체를 가리키는 것이다.
위 그림은 순환하지 않는 상태에서 예를 들었다.
붕어빵이라는 원래 개념을 추상화 과정을 통하여 Class의 틀(붕어빵 틀)을 만든다. 그리고 그 틀에 붕어빵 재료를 넣는 것이 인스턴스 그 인스턴스 과정을 통해서 붕어빵이 나오는 것을 객체라고 할 수 있다. 위 그림은 순환하지 않지만 결국 객체를 알아야 Class를 정의하여 객체를 찍어낼 수 있다. 객체를 인스턴스화 한 것이 메모리에 객체를 올리는 즉 값을 대입하는 최종 과정이므로 인스턴스가 객체를 가리키게 된 것입니다.
- References -
ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)
ko.wikipedia.org/wiki/%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4
ko.wikipedia.org/wiki/%EC%B6%94%EC%83%81%ED%99%94_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)
본인이 학습하고 이해한 것을 토대로 작성된 글입니다.
올바르지 못한 표현, 정답에 가까운 수정이 필요한 부분이 있는 경우 댓글로 남겨주시면 정말 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다!
'Java ☕ > Java' 카테고리의 다른 글
[Java] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) (0) | 2021.12.14 |
---|---|
[Java] 변수(Variable)와 상수(constant) (1) | 2021.11.30 |
Java의 장단점 (0) | 2021.11.10 |
Java 개인 프로젝트_ 웹 데이터 크롤러_ 설계 파트 (0) | 2020.11.29 |
자바(Java) 다운로드 하고 실행하는 방법 ( 이클립스 - eclipse ) (0) | 2020.10.12 |