JAVA - 클래스와 객체

흑이·2022년 5월 11일
0

JAVA의 객체지향 프로그래밍 기초부분을 정리



JAVA는 객체 지향 프로그래밍 언어

  • 우리가 주변에서 흔히 볼 수 있는 모든 실재하는 어떤 대상을 프로그래밍 언어에서는 객체(Object)라 부른다.

  • 컴퓨터 프로그래밍에서 일련의 명령어들의 나열을 통해 컴퓨터에게 말을 건네는 절차적 프로그래밍 방식과는 다르게,

  • 객체지향형 프로그래밍은 실제 사물의 속성(state)
    기능(behavior)을 분석한 후에 이것을 프로그래밍의 변수함수로 정의한 것

  • 객체 지향 접근 방식의 핵심 개념은 복잡한 문제를 더 작은 객체로 분해하는 것



클래스

  • 클래스(Class)란 객체를 ‘정의한 설계도(blueprint)' 또는 '틀(frame)’이라 정의할 수 있습니다.

  • 즉, 클래스는 객체를 생성하는데 사용되며, 반대로 객체는 클래스에 정의되고 설계된 내용 그대로 생성됩니다.

  • EX) 집의 설계도와 실제 집의 관계
    어떤 집에 대한 설계도(클래스)가 먼저 정의되어 있고, 이 설계도를 통해 각각의 집들이 만들어졌습니다.

  • 이렇게 클래스를 통해 생성된 객체를 우리는 해당 클래스의 인스턴스(instance)라 부릅니다.

  • 또한 클래스로부터 객체를 만드는 과정을 우리는 인스턴스화(instantiate)라 지칭합니다.


객체와 인스턴스의 차이는?

  • 객체는 모든 인스턴스를 포괄하는 넓은 의미를 가지고 있는 반면,

  • 인스턴스는 해당 객체가 어떤 클래스로부터 생성된 것인지를 강조한다는 데 그 차이가 있다고 할 수 있습니다.

객체 : 모든 인스턴스를 대표하는 포괄적인 의미
인스턴스 : 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미



객체

  • 객체는 크게 속성과 기능이라는 두 가지 구성요소로 이뤄져있습니다.

  • 속성과 기능은 각각 필드메서드로 정의되는데,

  • 하나의 객체는 다양한 속성과 기능의 집합으로 이뤄져 있습니다.

  • 속성과 기능은 이너클래스와 함께 객체의 멤버(member)라 부릅니다.



객체의 생성 과정

new 연산자

클래스 변수 = new 클래스();

  1. 먼저 특정 클래스 타입의 참조변수를 선언합니다. 2. new 키워드와 생성자를 통해 인스턴스를 생성하여 참조변수에 할당합니다.

  2. 여기서 참조 변수는 실제 데이터 값이 아니라 실제 데이터가 저장되어 있는 힙 메모리의 주소값을 가리킵니다.

  3. new 키워드는 생성된 객체를 힙 메모리에 넣으라는 의미를 가지고 있는데

  4. 생성자(클래스와 동일한 이름을 가졌지만 뒤에 소괄호가 붙음)를 통해 객체가 만들어지면 해당 객체를 힙 메모리에 넣는 역할을 수행하게 됩니다.



메모리 개념

클래스 변수 = new 클래스();
Person p = new Person();

  1. Person과 참조 변수 p는 각각 클래스 영역과 스택 영역이라는 다른 위치에 저장

  1. 생성자로 만들어진 인스턴스는 힙 메모리 영역에 들어가며 객체 내부에는 클래스의 멤버들이 위치

  2. 참조변수는 객체의 실제 값이 아닌 힙에 저장되어 있는 주소값을 가리키게 됨

  3. 메서드 구현 코드는 클래스 영역에 저장되고 객체 안에서는 그 위치를 가리키고 있다.

  4. 즉 같은 클래스로 만든 모든 객체는 동일한 메서드 값을 공유하기 때문에
    여러 번 같은 메서드를 선언해주는 것이 아니라 한번만 저장해두고 필요한 경우에만 클래스 영역에 정의된 메서드를 찾아 사용


  • 생성된 객체에서 필드값은 실제 저장공간이 객체 내부에 있다는 것

  • 메서드는 다른 영역에 하나만 저장해놓고 공유



https://brunch.co.kr/@oemilk/120

https://www.programiz.com/java-programming/class-objects

https://doozi0316.tistory.com/entry/JAVA-5%EC%A3%BC%EC%B0%A8-%ED%81%B4%EB%9E%98%EC%8A%A4%ED%81%B4%EB%9E%98%EC%8A%A4-%EA%B0%9D%EC%B2%B4-new-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%83%9D%EC%84%B1%EC%9E%90-this?category=935577

0개의 댓글