📕 Today I Learned - 오늘 내가 공부한 것을 정리합니다.
세상의 모든 사물을 단순히 추상화해보면 속성(데이터)과 기능 딱 2가지로 설명할 수 있다.
객체 지향 프로그래밍은 모든 사물을 속성과 기능을 가진 객체로 생각하는 것이다. 객체에는 속성과 기능만 존재한다.
객체 지향의 특징은 속성과 기능을 하나로 묶는 것 뿐만 아니라 캡슐화, 상속, 다형성, 추상화, 메시지 전달 같은 다양한
특징들이 있다.
클래스(Class)와 인스턴스(Instance)는 객체 지향 프로그래밍에서 중요한 개념이다.
클래스는 객체를 생성하기 위한 ‘틀’ 또는 ‘설계도’이다. 클래스는 객체가 가져야 할 속성(변수)과 기능(메서드)를 정의한다. 예를 들어 학생이라는 클래스는 속성으로 name, age, grade를 가진다.
객체는 클래스에서 정의한 속성과 기능을 가진 실체이다. 객체는 서로 독립적인 상태를 가진다.
→ student1 과 student2 는 같은 클래스에서 만들어졌지만, 서로 다른 객체이다.
특정 클래스로부터 생성된 객체, 주로 객체가 어떤 클래스에 속해 있는지 강조할 때 사용한다.
→ student1은 Student 클래스의 인스턴스다.
클래스가 객체의 설계를 정의하고, 인스턴스는 클래스에 따라 생성된 실제 객체를 뜻한다.
클래스에서 여러 인스턴스를 생성할 수 있고, 각 인스턴스는 클래스의 정의에 따라 각각 독립적인 데이터와 동작을 가지고 있다.
객체 vs 인스턴스
용어상 인스턴스는 객체보다 좀 더 관계에 초점을 맞춘 단어이다.
"student1은 Student의 객체이다." → "student1은 Student의 인스턴스이다."라고 특정 클래스와의 관계를 명확히 할 때 인스턴스라는 용어를 주로 사용한다.
⇒ 하지만 둘다 클래스에서 나온 실체라는 핵심 의미는 같기 때문에 보통 둘을 구분하지 않고 사용한다.
💭 대표적인 객체 지향 프로그래밍 언어 Java를 공부하며 객체 지향 프로그래밍과 객체 지향 프로그래밍에서 중요한 개념인 클래스, 인스턴스를 정리하였다. Velog 첫 포스팅으로 적절한 주제다 :) 나머지 자료들은 주말동안 시간을 내어 천천히 옮겨 놓아야겠다.