클래스와 객체의 차이를 설명해주세요. #9
Replies: 6 comments
-
클래스와 객체의 차이를 설명해주세요.클래스와 객체의 차이를 가장 쉽게 설명하자면 클래스는 프랜차이즈의 본사, 객체는 프랜차이즈의 각 지점이라고 볼 수 있습니다. 프랜차이즈 본사는 각 지점이 가게를 어떻게 운영할지에 대한 레시피, 체계 등을 가지고 있습니다. 그리고 각 지점은 본사의 지침을 기반으로 가게를 운영합니다. 또한 프랜차이즈 본사는 본사에서 제공하는 문의 연락처 등을 가집니다. 이처럼 클래스는 레시피, 체계와 같은 클래스 구조를 가지고 객체는 해당 구조에 맞게 생성돼 작동합니다. 그리고 또 클래스는 문의 연락처와 같이 클래스 단에서 제공하는 static 변수, 매서드를 가집니다. 이런 특징으로 클래스와 객체는 수명 주기와 메모리 점유에 대한 차이도 존재합니다. 클래스는 언제는 객체 생성이 가능하도록 프로그램이 실행되는 동안 유지돼야하고 객체는 참조가 안된다면 GC에 의해 정리됩니다. 또한 클래스는 첫 적재 과정에서 하나만 메서드 영역에 저장되며 객체는 new 연산자로 언제든 생성하여 힙 영역에 저장됩니다. 대게로 객체의 무분별한 생성을 지양합니다. 그런데 GC가 똑똑하게 객체를 정리해주는데 왜 지양해야할까 라는 의문을 가지게 됩니다. 이에 답하자면 GC가 청소작업을 할땐 모든 스레드를 잠시 강제로 정지하고 정리합니다. 그런데 정리할 객체가 많다면 청소하는 동안 프로그램은 멈추고 사용자는 이를 렉으로 인식하며 사용자 경험을 저하 시킵니다. 그리고 캐시 메모리가 오염될 수도 있습니다. 객체 하나를 생성해 자주 사용한다면 이는 캐싱되어 CPU의 작업 속도를 끌어올려줍니다. 그런데 매번 객체를 새로 생성해 사용한다면 캐시 메모리가 오염되며 CPU의 작업 속도에 이점을 발휘하지 못하게 됩니다. |
Beta Was this translation helpful? Give feedback.
-
|
기본질문) 클래스와 객체의 차이를 설명해주세요.클래스는 객체를 만드는 설계도이며, 어떤 속성과 어떤 메서드를 가질지 정의한 집합이다.
클래스는 컴파일될 떄 Method 또는 클래스 영역에 딱 한 번 저장되어, 프로그램 전체에서 딱 하나만 존재한다. 객체는 new 키워드를 사용하면, 새 객체가 생성되고 Heap 영역에 실제 메모리 공간이 할당되어 저장된다. 변수 선언 시 Stack영역에 객체의 참조 변수(dog1)가 저장되고, 생각해보면 좋은 질문) 1. 클래스 변수와 인스턴스 변수의 차이는 무엇인가요?객체는 그 클래스의 탑을 가진 변수를 선언할 떄가 객체가 된다. 그리고 이 객체가 인스턴스 메모리 할당이 되면 인스턴스화된다고 한다. 인스턴스 변수(name, age)는 Heap영역에 객체마다 각자 따로 할당된다. 서로 값을 수정해도 영향을 주지 않는다. 클래스 변수(totalCount)는 Method 영역에 딱 하나만 존재한다. 어떤 객체를 통해 접근하든 같은 공간을 가리키기에, 한 객체가 값을 바꾸면 다른 모든 객체에서도 바뀐 값으로 접근가능하다. (그러나 클래스 변수는 객체명.변수명으로도 접근이 가능하지만, 가급적 클래스명.변수명 으로 접근하는게 코드품질 측면에서 좋다고한다.) 따라서 클래스 변수는 모든 객체가 공통으로 알아야 하는 값에 사용되고, 인스턴스 변수는 객체마다 달라야 하는 고유한 상태를 나타낼 때 사용된다. 2. 객체를 많이 만들면 어떤 문제가 생길 수 있나요?메모리 부족, GC부담 증가, 생성 비용 누적, 메모리 누수 등의 문제가 발생할 수 있다.
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
클래스와 객체의 차이를 설명해주세요. 클래스는 객체를 만들기 위한 설계도이다. 클래스는 설계도에 불과하기 때문에 실제 메모리에 가지지는 않는다(실제로는 Method 영역에 바이트코드로 존재 -> java 8이후로는 Native 메모리로 이동했다고 함). 설계도로 만든 실제 객체를 인스턴스라고도 한다. 객체는 실제 데이터를 가지고 메모리에 존재하는데, 모든 인스턴스가 JVM의 힙 영역에 생성된다. 참조는 JVM 코멘트 스터디 때 학습한 것처럼, 스택 영역에 저장되고, 만약 static 으로 객체를 선언한다면 Method 영역에 참조가 저장된다. 클래스 변수는 멤버 중 static 으로 선언된 변수를 클래스 변수라고 한다. Method 영역에 하나만 생성되기에 클래스에 고정되는 변수이고 인스턴스 변수는 각 인스턴스가 다른 값을 가질 수 있는 변수이다. 객체를 많이 만들면 당연히 힙에 메모리를 많이 차지하고 가비지 콜렉터에 부하가 걸리는데, 이로인해 병목이 발생할 수 있다. |
Beta Was this translation helpful? Give feedback.
-
기본질문클래스와 객체의 차이를 설명해주세요.클래스(Class): 객체(Object): 인스턴스(Instance):
[클래스 변수와 인스턴스 변수의 차이는 무엇인가요?] [객체를 많이 만들면 어떤 문제가 생길 수 있나요?] |
Beta Was this translation helpful? Give feedback.
-
1. 클래스 변수와 인스턴스 변수의 차이는 무엇인가요?클래스 변수란? 클래스로부터 생성된 모든 객체가 단 하나의 메모리 공간을 공동으로 공유하는 변수이다. 객체를 아무리 많이 만들어도 , 이 변수는 메모리에 딱 하나 존재한다. 따라서 한 객체가 이 값을 수정하면 , 다른 객체에서도 수정된 값으로 보인다. 프로그램이 실행되어 클래스가 메모리에 로드 될 때 딱 한번 생성된다. 즉, 객체를 만들지 않아도 이미 메모리에 존재하므로 클래스 이름을 통해 접근이 가능하다. 인스턴스 변수란? 객체가 생성된 때 마다 각 객체 내부에 개별적으로 생성되는 변수 하나의 객체의 값이 수정되더라도 다른 객체의 값에 영향을 주지 않는다. 객체가 메모리에 실제로 만들어 질 때 함께 생성 2. 객체를 많이 만들면 어떤 문제가 생길 수 있나요?컴퓨터의 자원은 유한하다. 2-1. 객체는 RAM 의 힙 메모리에 저장된다. → 힙 메모리가 허용 범위를 넘어서면 메모리 확보를 위해 프로그램이 죽는다. 2-2. 260708.0050 : 다음에 이어서…(GC 공부하고 오겠습니다.) |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
📆 일자: 26년 7월 7일(화)
발제 의도
기본 질문
클래스와 객체의 차이를 설명해주세요.
생각해보면 좋은 질문
학습자료
Beta Was this translation helpful? Give feedback.
All reactions