Java - class (선언, 필드, 생성자)

객체 지향 프로그래밍(OOP, Object-Oriented Programming)
객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 된다.
객체(object)란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있다.
이러한 객체의 상태(state)와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍 이다.
이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 한다.
Java class 란?
- 변수(데이터, 속성)와 메서드(행위)를 가지고 있는 집합이다.
- 객체를 생성하기 위한 틀이다.
- class키워드로 정의하고, new연산자를 통해서 인스턴스를 생성한다.
- 자바는 클래스들의 모임으로 이루어져 있다.

class fild : 객체 지향에서 속성에 해당하는 맴버 변수
class method : 객체 지향에서 기능(함수)에 해당
접근제어자 ?
- 외부의 클래스가 해당클래스의 접근을 허용하는 범위.
- 종류
- public, protected, default, private
- public : 접근 제한이 없음
- protected : 같은 패키지,상속받은 자손클래스라면 다른 패키지에서도 사용가능
- default : 같은 패키지 내에서만 사용가능
- private : 같은 클래스 내에서만 사용가능
접근 제어자를 쓰는 이유
- 외부로 부터 데이터를 보호하기 위해서
- 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위
객체의 생성과 사용법
- 객체의 주소정보를 담을 레퍼런스 변수를 선언
- 변수에 new 연산자를 이용하여 객체를 생성하고 지정해줘야 한다.
- 레퍼런스 변수 를 통해 멤버변수(필드) 및 (메서드)에 접근하여 사용

new 연산자
- new 연산자 Heap 이라는 메모리 영역에 메모리 공간을 할당한다.
- 메모리주소를 반환한 후 생성자를 실생
- instance 를 생성하고 참조값을 리턴 하고 생성자를 호출

new 연산자를 사용해 "String" 이라는 문자열값을 담고있는 String 객체를 생성

변수는 Stack 영역에 할당 될것이고, new String으로 생성된 문자열값이 Heap영역의 메모리 공간을 할당받아 str이라는 변수가 그 메모리주소를 가르키고 있을것이다. 이를 다른 말로 참조라고도 한다.
그렇다면 똑같이 생긴 문자열을 new 연산자로 또 생성하면 어떻게 될까?

변수를 한개 더 생성해서 똑같이 생긴 문자열값을 new 연산자를 통해 초기화해보았다.

처음에 생성한 "string"을 가르키지 않고 Heap 메모리에 새로운 영역을 할당받아 생성한것을 볼 수 있다.
이렇게만 보면 확실치 않으니 메모리 주소를 출력시켜 보았다.

System.identityHashCode()는 메모리주소를 숫자값으로 반환해주는 메서드
리터럴 방식

리터럴 방식은 메모리 주소가 같다고 나오는데 new 연산자는 메모리 주소가 다르게 나온다. 이것이 new 연산자와
리터럴 방식의 차이이다.
new 연산자는 객체를 생성할 때 사용하고 Heap이라는 메모리 영역에 각각의 새로운 메모리 공간을 할당해주는 역할을 한다. new 연산자로 생성한 객체들의 메모리 주소가 다르게 나오는 것도 이 때문이다.
인스턴스(instance)
- 자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(Object)를 선언해야 한다.
- class로 부터 객체를 선언하는 과정을 클래스의 instance화라고 한다.
- 선언된 해당 클래스 타임의 객체를 instance라고 한다.
- instance란 메모리에 할당된 객체를 의미한다.
- Java 에서는 하나의 class 로부터 여러 개의 instance를 생성 할수 있다.
- instance는 독립된 메모리 공간에 저장된 자신만의 필드를 가질수 있다.
- 해당 class 의 모든 메소드(method)는 class에서 생성된 모든 instance가 공유하게 된다.
원래 더 있지만 너무 많고 방대해서 출처를 남길태니 자세한건 링크 타고 공부를.......
[출처]
https://kadosholy.tistory.com/89
https://yoo11052.tistory.com/50
https://velog.io/@hochul-y/JAVA-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%9E%80
[JAVA] 클래스란?
📢 클래스 자바에서 클래스는 객체를 정의하는 기본 적인 요소입니다. 클래스 안에는 생성자 ,객체의 필드(변수) 와 객체가 어떤 행동을 할건지를 보여줄수 있는 메소드로 구분됩니다. 클래스
velog.io
[Java] 리터럴(literal)이란?
자바의 타입은 크게 두가지로 나뉩니다. 하나는 원시타입(primitive type) 또 하나는 참조타입(reference type) 입니다. 원시타입은 우리가 흔히아는 byte, int, short, long, float, double ,boolean, char가 원시타입
yoo11052.tistory.com
[Java] 자바 - 클래스 및 객체 생성과 사용법
자바 - 클래스 및 객체 생성과 사용법 1. 클래스 정의 객체를 만들어 사용하기 위해서는 먼저 클래스 정의가 필요합니다. 클래스는 객체를 만들기 위해 정의된 설계도와 같은 것으로 멤버변수(필
kadosholy.tistory.com