[클래스를 먼저 생성 -> 클래스를 통해 객체를 만듦. -> 객체를 만들면, 안에 데이터 삽입>
객체란?
:클래스에서 정의된 내용대로 new 연산자를 통해 메모리 영역에 생성된 것.
데이터와 기능을 포함한 모든 것.
=> 익명클래스(클래스를 따로 정의하지 않고 일시적으로 생성되는 객체), 배열 등
클래스란?
:객체의 특성에 대한 정의를 한 것으로 캡슐화를 통해 기능을 포함한 개념, 사물이나 개념의 공통 요소를 추상화하여 정의
추상화란?
:유연성을 확보하기 위해 구체적인 것은 제거한다는 의미.
프로그램에서 필요한 공통점을 추출하고, 불필요한 공통점을 제거하는 과정
인스턴스란?
:항상 클래스에서 만들어진 객체를 의미.
특정 클래스(Class)로부터 생성된 객체를 더 구체적으로 인스턴스라고 한다.
즉, 모든 인스턴스는 객체이지만, 모든 객체는 인스턴스는 아니다.
<객체 지향 언어>
Stack: 메서드 호출 시 생성되는 참조 변수가 저장된다.
예를 들어, Student s, Student t 같은 참조 변수들이 여기에 저장된다.
스택은 메서드가 끝나면 자동으로 해제된다.
Heap: new 키워드를 통해 생성된 객체가 저장된다.
각 개체는 힙에 독립된 공간을 차지하며, 스택의 참조 변수가 이 객체를 가리킨다.
힙의 객체는 참조가 없어질 때(더 이상 스택에서 참조되지 않을 때) GC(Garbage Collector)에 의해 제거된다.
예를 들어, Student s = new Student();
여기에서 Student s는 클래스 타입으로 쓰인다. 즉, 자료형으로 쓰인다. s는 변수명이다.
new Student()는 Studnet 클래스를 생성하라는 의미이다.
<클래스>
package com.obj.model.vo;
//모든 패키지에서 이용이 가능한 클래스
public class PublicTestClass {
//접근제한자 : 이용범위를 설정하는 예약어
//public : 프로젝트내 모든 패키지에서 이용 가능(이용 가능하다는 것은 생성하는 것)
//default : 프로젝트내 같은 패키지에서만 이용 가능(이용 가능하다는것은 생성하는 것)
}
import com.obj.model.vo.PublicTestClass;
public class BasicMain {
public static void main(String[] args) {
//접근제한자가 public인 클래스는 이용이 가능하다.
new PublicTestClass(); //클래스를 생성하라는 것이다. 인스턴스화하라는 이야기.
// new com.obj.model.vo.PublicTestClass() 이렇게 작성하면, import 안 써도 된다.
//접근제한자가 default인 클래스 다른 패키지에서는 이용이 불가능하다.
//new DefaultTestClass();
}
}
//접근제한자가 default인 클래스
//같은 패키지에서만 이용이 가능하다.
class DefaultTestClass {
}
public class TestMain {
public static void main(String[] args) {
//같은 패키지내에서는 import 경로를 하지 않아도 된다.
//다른 패키지내에서는 import 경로를 사용해야 한다.
new DefaultTestClass();
}
}
<필드>
필드란?
:클래스의 멤버변수
(멤버변수는 클래스에 속하는 각가의 변수를 지칭할 때 사용)
필드 접근제한자는 클래스만 생성해서 사용하는 것이 아니라, 객체도 생성이 되어야 사용이 가능하다.
<생성자>
:메서드는 객체의 기능과 동작을 수행하며, 여러 번 호출할 수 있다.
생성자는 객체를 초기화하는데 사용되며, 객체가 생성될 때 한 번만 호출된다.
생성자와 메서드를 구분함으로써, 초기화와 기능을 명확히 분리하고 코드를 더 유연하고 유지보수하기 쉽게 만든다.
기본 생성자란?
:작성하지 않은 경우, 클래스 사용시 JVM이 자동으로 기본 생성자 생성.
매개변수 생성자란?
:객체 생성시 전달받은 객체를 초기화 하기 위해 사용.
매개변수 생성자 작성 시 JVM이 기본 생성자를 자동으로 생성해주지 않음.
상속에서 사용 시 반드시 기본 생성자를 작성.
오버로딩을 이용하여 작성.
오버로딩이란?
:한 클래스 내에 동일한 이름의 메소드를 여러 개 작성하는 기법
=>조건
-같은 메소드 이름
-다른 매개변수의 개수 또는 다른 매개변수 타입
this란?
:모든 인스턴스 메소드에 숨겨진 채 존재하는 레퍼런스로 할당된 객체를 가리킴.
함수 실행시 전달되는 객체의 주소를 자동으로 받음.
this()란?
:생성자, 같은 클래스의 다른 생성자를 호출할 때 사용되며 반드시 첫 줄에 선언.
같은 클래스 내의 다른 생성자를 호출함으로써 중복된 초기화 코드를 제거하고, 코드를 더 깔끔하고 유지보수하기 쉽게 만든다.
생성자 오버로딩이 많아지는 경우 this()는 필수적인 도구이다.
<메소드>
-setter 메소드란?
:필드에 변경할 값을 전달 받아서 필드 값을 변경하는 메소드
-getter 메소드란?
:필드에 기록된 값을 읽어서 요청한 쪽으로 읽은 값을 넘기는 메소드
:스택은 메서드 호출 정보를 저장하는 것이다.
스택 메모리는 주로 메서도 호출 스택을 관리하는 역할이다.
스택에는 주소뿐만 아니라, 호출된 메서드에 필요한 정보(매개변수, 지역변수, 반환주소 등)도 저장된다.