출퇴근 길이나, 자기 전에 가끔 okky나 velog 등등 개발자 커뮤니티를 한번 훑어보며, 오늘은 무슨 재밌는 이야깃거리가 없나 하고 보는 경우가 있다. 그러던 중 객체, 클래스, 인스턴스에 대한 정의가 무엇인지 물어보는 글이 있어서 곰곰이 생각해보다가 한번 정리를 해본다.
기본적으로 프로그래밍은 실세계에서의 문제를 해결하기 위한 목적(?) 또는 방향성을 지니고 있고, 해당 문제를 어느 정도 추상화해서 다룬다. 이때 실세계에 있는 어떠한 것들을 객체지향에서는 객체라고 가리키고 있다고 생각한다. 예로
내가 학생부 프로그램을 만든다고 했을 때, 학생부에 기입되는 학생들은 하나의 객체이고, 학생부 또한 객체이다.
넓은 의미에서 객체는 우리가 인지를 하고 있는(식별 가능한) 유형, 무형 모든 것을 객체라고 생각할 수 있을 것 같다.
추상화(Abstraction)를 하는 방법 중에는 분류(Classification)와 인스턴스화(Instantiation)라는 개념이 있다. 분류(Classification)는 객체들의 공통적인 속성을 공유할 수 있는(또는 갖고 있는) 해당 범주(범위, 개념)를 의미하고, 이를 묶어 추상화하는 것을 의미한다. 따라서 클래스란 객체의 속성을 묶어 추상화한 일종의 형식 또는 틀이라고 생각할 수 있을 것 같다.
인스턴스화(Instantiation)는 분류(Classification)와는 다르게 속성의 범주나 대상의 개념을 실체화하여 객체로 만드는 과정을 의미한다. 위에서 클래스를 일종의 틀이라고 했다면, 해당 틀을 이용해 실제로 무언가를 만드는 과정을 인스턴스화라고 하며 그 결과물을 인스턴스라고 생각한다.
[ 3줄 요약 ]
프로그래밍을 하는 데 있어서 해결하고자 하는 문제와 관련해서 내가 인지를 하고 있는 것은 객체이고, 이를 적절한 공통 속성으로 모아 범주를 나는 것을 클래스, 공통적인 속성을 모아 범주를 나눈 것을 프로그래밍을 통해 실체화한 것을 인스턴스라고 생각하면 될 것 같다.
'Programming > Java' 카테고리의 다른 글
[삽질일기] Arrays.asList 와 ArrayList의 차이 (1) | 2021.07.17 |
---|---|
[Java8] 함수형 인터페이스와 람다 표현식 (0) | 2021.06.26 |
[Java] CMD 또는 Shell 환경에서 Java 컴파일 및 Jar 파일 만들기 (0) | 2021.01.12 |
[Java8] 윤년, 다음달 말일 계산 (0) | 2020.07.17 |
[Java] AES 256 암복호화 유틸클래스 (0) | 2020.07.15 |