내일배움캠프 7기

특강(클래스,메모리구조_Heap,Stack)

suuuki 2024. 10. 23. 16:02

Class 특강


1.객체지향 프로그래밍

  • 코드 재사용성 증가: 한번 작성한 클래스를 여러 곳에서 재사용할 수 있음
  • 유지보수 용이성: 코드 구조가 명확해져 수정과 업데이트가 쉬움
  • 신뢰성 향상: 객체 단위로 문제를 해결함으로 버스 발생 가능성이 줄어 듬

그 외) 절차지향, 함수형 프로그램

 

2.클래스(Class)와 객체(Object),인스턴스(Instance)

클래스(class)란?

정의: 객체를 생성하기 위한 설계도

용도: 객체의 속성(변수)과 일&기능(메서드), 생성될때 꼭 필요한(생성자) 정의

->객체는 new 로 정의

 

객체(Object)란?

정의: 클래스에 정의된 내용을 기반으로 메모리에 생성된 구체적인 대상

용도: 프로그램에서 실제로 활용되는 실체

객체는 추상화 수준을 뒤바꿔 말할때가 많다

인스턴스(Instance)란?

정의: 클래스로부터 생성된 구체적인 객체를 의미

용도: 인스턴스는 메모리에 할당되어 실제로 동작하는 객체

 

클래스,객체,인스턴스의 관계

클래스는 객체를 생성하기 위한 설계도

ex) 집을 짓기 위한 설계도

객체는 클래스에 정의된 대로 생성된 구체적인 사물

인스턴스는 객체가 메모리에 할당되어 실제로 사용되는 상태를 의미

ex) 설계도를 바탕으로 실제로 지어진 집

즉, 객체와 인스턴스는 거의 동일한 의미로 사용되지만, 클래스에 대한 실체화된 결과물을 강조할 때 인스턴스라는 용어를 사용

ex)여러 채의 집을 짓기 위해 하나의 걸계도를 여러 번 사용 할 수 있듯이, 하나의 클래스로부터 여러개의 객체&인스턴스를 생성할 수 있음

 

 

3.변수(Variable)란 무엇인가?

데이터를 저장하기 위한 메모리 공간, 프로그램에서 데이처를 처리하고 유지하는데 사용

 

변수의 종류

-멤버 변수(필드)

  • 인스턴스 변수
  • 클래스 변수(static 변수)

-지역 변수

  • 매개변수

인스턴스 변수

정의: 클래스 내부에 선언되며, 각 객체마다 별도로 존재하는 변수

특징: 객체가 생성될 때 함께 생성

        객체마다 다른 값을 가질 수 있음

인스턴트 는 힙매모리에 생성 

 

 

클래스 변수(static 변수)

정의: static 키워드를 사용하여 선언된 변수, 클래스에 속하며 모든 객체가 공유

특징: 클래스가 메모리로 로드될때 생성

         모든 객체가 동일한 값을 공유

 

지역변수

정의: 메서드 내부에서 선언된 변수, 해당 메서드 내에서만 사용가능

특징: 메서드가 호출될 때 생성되고, 메서드가 종료되면 소멸

매개변수

정의: 메서드나 생성자를 호출 할 떄 전달되는 값들을 받기 위한 변수

특징: 지역 변수의 일종으로 메서드 내에서만 사용가능

4. 클래스 활용하기

-클래스 정의: 객체의 속성과 기능을 정의

객체 생성(인스턴스화): 클래스를 기반으로 객체(인스턴스)를 생성

객체 활용: 생성된 객체의 속성과 메서드를 사용

 

persin1,2 지역변수/ 힙에 있는 인스턴스를 가르킨다 new person1("")

person.print 스테틱 이용해서 씀

 

5.객체의 생성과 인스턴스화

객체 생성은 클래스를 기반으로 메모리에 실제 객체를 만드는 과정->인스턴스화

 

객체 생성 방법

클래스이름 객체이름 = new 클래스이름(생성자 매개변수);
  • new 키워드는 메모리의 힙(Heap) 영역에 새로운 객체를 생성
  • 생성자를 호출하여 객체의 초기 상태를 설정
  • 생성된 객체의 주소는 스택(Stack)영역의 참조 변수에 저장

스테틱이 없다

6. 지역 변수와 전역 변수에 따른 변수 참조 차이

 

지역변수(Local Variable)

정의: 메서드 내부나 특정 블록{{}}내에서 선언된 변수, 해당 블록 내에서만 사용 가능

생명주기: 블록이 시작될 때 생성, 블록이 종료되면 소멸

참조방법: 해당 블록 내에서 직접 변수 이름으로 참조

 

전역변수(Global Variable)

자바에서는 전역변수라는 용어를 공식적으로 사용하지 않음

일반적으로 클래스 전체에서 접근 가능한 멤버 변수를 전역변수로 생각할 수 있음

인스턴스 변수: 객체마다 존재, 객체가 생성될 때 함께 생성

클래스 변수(static 변수): 클래스에 속하며, 모든 객체가 공유

 

변수 참조의 차이점

  지역변수 전역변수
인스턴스 변수 클래스 변수(Static)
스코프
(Scope,유효 범위)
·선언되 블록 내에서만 접근 가능
블록 밖에서는 존재하지 않음 
·클래스 내의 모든 메서드에서 접근 가능
·접근 제어자(private,public 등)에 따라 외부 클래스에서도 접근 가능 할 수 있음
생명주기
(Lifecycle)
·메서드나 블록이 실행될 때 생성
·종료되면 소멸
·{} 코드블럭 내에서만 살아있음
·객체가 생성될때 생성(new)
·객체가 가비지 컬렉션될때 소멸
·프로그램이 시작될때 클래스로더에 의해 메모리에서 로드(런할때)
·프로그램 종료시 소멸
메모리 영역 스택(Srack)영역에 저장 힙(Heap) 영역에 저장 메서드(Method) 영역에 저장
정리 ·메서드 내부에서만 유효
·외부에서 접근 가능
·메모리에서 빠르게 생성되고 소멸
·클래스 전체에 접근 가늘
·객체나 클래스를 통해 참조
·프로그램 실행동안 지속->메모리를 더 오래 점유
실생활 예시 ·특정 잡업을 할때 사용하는 일회용 메모지-> 작업이 끝나면 버려짐 ·개인이 소유한 물건과 같아, 그 사람(객체)이 존재하는 동안만 사용됨 ·모두가 공유하는 공용 자원과 같아서 누구나 접근 가능

 

 

6. 메서드 활용

 

메서드는 객체의 기능을 정의

메서드를 통해 객체의 동작을 구현하고 호출 할 수 있음

인스턴스 메서드 객체마다 별도로 동작
인스턴스 변수를 사용 할 수 있음
클래스 메서드 클래스에 속함
객체 생성 없이 호출 할 수 있음

 

8. 메모리 구조 이해하기

스택(Stack) 영역 힙(Heap) 영역

·지역 변수와 메서드 호출이 저장
·메서드가 호출 될 때마다 스택 프레임 생성, 종료되면 제거
·참조변수는 스택에 저장되며, 힙에 있는 객체의 주소 가짐

·*객체(인스턴스)**가 저장됨
·new 키워드로 생성된 객체들이 할당
·프로그램이 종료되거나 가비지 컬렉터에 의해 메모리가 해제

 

 

9.정리