본문 바로가기

JAVA

[Snack Java] 13. 자바의 클래스(Class), 객체(Object), 인스턴스(Instance)

 


클래스(Class)

객체를 생성하거나 객체의 데이터 타입과 메서드를 정의하는 일종의 템플릿(견본)

즉, 객체를 만드는 설계도이자 틀(blueprint or frame)!  

클래스 형태

접근제어자 클래스선언키워드 클래스이름 실행문 ex) public class MainClass {...}

public class MainClass {
	int i = 10; // (1)필드
	printEveryThing() {...} // (2)메서드
	MainClass {...} // (3)생성자
	class SubClass {...} // (4)이너 클래스
}

클래스 구성요소

메서드(Method): 클래스의 기능을 나타내는 함수

필드(Field): 클래스의 속성을 나타내는 변수

생성자(Constructor): 객체를 생성하는 기능을 담당하는 함수

내부클래스(Inner Class): 클래스 내부의 클래스

클래스의 존재 이유

1. 같은 양식을 가진 객체를 여러번 만들 수 있도록 지원합니다.

2. 같은 클래스로 제작된 여러 개의 객체가 지닌 기능을 한번에 관리 가능합니다.

클래스 규칙

1. 클래스의 이름은 카멜케이스(camelCase)를 따릅니다.

2. 클래스의 이름은 대문자로 시작합니다.


객체(Object)

자바에서 객체란 클래스로 정의를 내린 구현체로 클래스에서 부여한 속성(attribute, field) 과 기능(behavior, method)을 지니고 있습니다.

객체 생성방법

타입선언 객체명;

ex) MainClass mainObj;

MainClass mainObj;

객체 구성요소

속성(Attribute): 객체가 지닌 데이터 as 필드(Field)

기능(Behavior): 객체가 실행할 수 있는 기능 as 메서드(Method)

객체의 존재 이유

1. 코드를 데이터와 기능을 담은 '객체' 단위로 구분함으로써, 객체 각각의 내부 데이터를 외부로부터 보호하고 은닉하여 데이터 참조 오류를 방지하고, 객체의 조합을 간편하게 만들어냅니다.

2. 객체 내부 코드의 변경에 외부 객체가 느슨하게 연결되어 내부 코드 설계, 재설계가 간편합니다.

3. 작업 단위를 분할하기 간편하여 대규모 협업 프로그래밍에 이점을 줍니다.

객체 규칙

1. 객체의 이름은 카멜케이스(camelCase)를 따릅니다.

2. 객체의 이름은 소문자로 시작합니다.

3. 객체는 new 키워드를 이용해 생성합니다.


인스턴스(Instance)

객체를 '실제 메모리 상에 할당'한 실제 구현체. (실제 현장에서는 객체와 인스턴스를 크게 구분하지 않는 경우가 많습니다.)

 

★객체(Object)와 인스턴스(Instance)의 차이?

객체는 클래스로 정의한 구현체의 개념이며, 실제 메모리 상에 존재하는 구현물은 인스턴스로 정의합니다.

즉, 인스턴스란 각 메모리 상에 실제로 구현된 객체입니다. 굳이 인스턴스와 객체를 나누는 이유는 객체가 메모리에 여러 개로 나누어 할당될 수 있기 때문입니다.

이는, 같은 객체일지라도 실제 구현 시에는 다른 물리적 장소에 저장되는 것을 의미합니다. 따라서 각각의 인스턴스는 서로 다른 주솟값을 가지고 메모리에 할당되기 때문에 구분이 필요한 것입니다. 

개념으로서의 아이패드(객체)와 실제 생산되어 모델번호가 찍힌 생산물인 아이패드(인스턴스)의 차이와 같습니다.

 

인스턴스 생성방법

인스턴스 생성

객체명 할당자 객체생성키워드 클래스생성자

ex) mainObj = new MainClass()

mainObj = new MainClass();

객체, 인스턴스 동시 생성

타입선언 객체명 할당자 객체생성키워드 클래스생성자

ex) MainClass mainObj = new MainClass()

MainClass mainObj = new MainClass();

인스턴스 규칙 (= 객체)

1. 객체의 이름은 카멜케이스(camelCase)를 따릅니다.

2. 객체의 이름은 소문자로 시작합니다.

3. 객체는 new 키워드를 이용해 생성합니다.


 

참고자료

https://yunjuniverse.tistory.com/19

 

객체지향 프로그래밍, 그 철학에 관하여 - 1 기초 개념, 탄생 배경

 C++, JAVA와 같은 프로그래밍 언어를 공부하다보면 필수적으로 마주치는 개념이 바로 그 이름도 이상한 '객체지향 프로그래밍(Object-oriented programming)'이다. 자료형과 연산자 공부하고 알고리즘 문

yunjuniverse.tistory.com

https://yunjuniverse.tistory.com/20

 

객체지향 프로그래밍, 그 철학에 관하여 - 2 객체 개념 심화, 특징

이전 글을 읽고 오시면 훨씬 이해가 쉽습니다! 2022.05.16 - [컴퓨터 사이언스] - OOP(Object-oriented programming), 그 프로그래밍 철학에 관하여 - 1 기초 개념, 탄생 배경 OOP(Object-oriented programming),..

yunjuniverse.tistory.com

https://yunjuniverse.tistory.com/22?category=1008444 

 

객체지향을 위한 자바 언어의 구조와 원칙

객체지향에 대해 모르신다면 본 글을 읽으시기전에 꼭 이전 발행 글을 읽으시길 권장합니다. 2022.05.16 - [컴퓨터 사이언스] - 객체지향 프로그래밍, 그 철학에 관하여 - 1 기초 개념, 탄생 배경 객

yunjuniverse.tistory.com

 

 

 

이전 글 보기

2022.06.06 - [JAVA] - [Snack Java] 12. 자바의 배열 (Array)

 

[Snack Java] 12. 자바의 배열 (Array)

이전 글 보기 2022.06.06 - [JAVA] - [Snack Java] 11. 자바의 반복문 (WHILE문, DO WHILE문, break, continue) [Snack Java] 11. 자바의 반복문 (WHILE문, DO WHILE문, break, continue) 이전 글 보기 2022.06.05..

yunjuniverse.tistory.com