객체란?
- 객체 : 주체가 아닌 것, 주체가 활용하는 것
- 우리 주변에 있는 모든 것으로 프로그래밍의 대상 : 사물, 개념, 논리…
- 객체지향 프로그래밍
- 주변의 많은 것들을 객체화 해서 프로그래밍 하는 것
- 객체지향은 객체를 많이 만드는 것을 추천한다?
- 객체지향 프로그래밍의 장점
- 블록 형태의 모듈화된 프로그래밍
- 신뢰성 높은 프로그래밍이 가능하다.
- 추가/수정/삭제가 용이하다.
- 재 사용성이 높다.
- 블록 형태의 모듈화된 프로그래밍
- 현실 세계 객체, 클래스, 프로그램의 객체(instance, object)의 관계
- 현실의 객체가 갖는 속성과 기능은 추상화(abstraction)되어 클래스에 정의된다.
- 클래스는 구체화 되어 프로그램의 객체(instance, object)가 된다.
- 현실의 객체는 우리가 만지고 느낄 수 있는 것 → 실생활에 구체화 되어있는 내용
- 객체를 필요할 때마다 매번 처음부터 새로 만들어야 한다면?
- 실생활에서는 틀, 설계도(blueprint)를 사용
- 설계도는 제품을 만들기 위해 꼭 필요하지만 이를 사용하지는 않고 설계도로 만든 제품 사용
- 설계도는 하나의 종류(Type)가 되고 설계도를 통해 나온 제품을 객체라고 부르며 주체가 사용
💡 프로그래밍으로 추상화된 클래스를 만들고, 이를 구체화 시켜 객체를 만든다!
타입
- 기본형 vs 참조형
- 기본형 타입은 8개
- 참조형 타입은 무한개!(내가 만들면 만들수록 다 참조형 타입!)
객체 생성과 메모리
- JVM의 메모리 구조
- G.C : Garbage Collector
- <예시>
public class JVMTest {
public static void main(String[] args) {
String s1 = "JVMTest";
String s2 = "JVMTest";
String s3 = new String("JVMTest");
String s4 = new String("JVMTest");
String s5 = s1;
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1 == s4);
System.out.println(s1 == s5);
System.out.println(s3 == s4);
}
}
과연 출력이 어떻게 나올까?
설명 :
- s1이 생성될 때 heap에 새로운 "JVMTest"라는 문자열 객체 생성
- s2는 heap에서 "JVMTest"라는 문자열 객체 찾음
- 있다면 그 객체를 참조
- 없다면 새로 생성
- s3는 heap에 새로운(new) "JVMTest" 문자열 객체 생성
- s4도 heap에 새로운(new) "JVMTest" 문자열 객체 생성
- s3, s4는 서로 다른 객체를 참조하는 것!
- s5는 s1을 참조하므로 같은 객체 참조
'Java' 카테고리의 다른 글
[JAVA] 생성자, this, super (0) | 2024.01.24 |
---|---|
[JAVA] 메서드(Method) (0) | 2024.01.23 |
[JAVA] 변수(Variable)와 자바 주석문 (4) | 2024.01.21 |
[JAVA] 배열, 다차원 배열 (0) | 2024.01.18 |
[JAVA] 기본 문법 (0) | 2024.01.17 |