primitive type <- 이미 memory size 고정, 사용방식 고정
ex) int num = 10; num[10]
primitive type이 편하고 처리도 쉽지만, 게시판 댓글처럼 사용자가 얼만큼의 입력을 할 지 모르는 상황에서
primitive type을 사용할 수는 없다.
reference type <- 미리 memory size를 고정할 수 없는 데이터
즉, 제한된 메모리에 얼마나 큰 값이 들어올지 모르니까, 주소값(참조값)을 변수에 저장한다.
heap이라는 메모리 영역에 데이터 값을 저장하고, 변수에는 heap의 주소(값이 저장된 주소), 위치주소를 저장한다.
그래서 java에서 String str = new String ("Hello"); 라고 한다면
변수 str에는 hello가 저장되는게 아니라 heap에 hello를 저장하고, hello를 저장한 "heap의 주소"를 str에 저장하는 것이다.
data -> memory
int age = 25;
double price = 100.5;
String name = "이름"; // 이건 리터럴로 선언
String hobby = new String("게임"); // 이건 객체로 생성
String 자체는 불변(immutable)이다.
즉, 한 번 생성된 문자열 객체(문자 타입의 배열)는 변경할 수 없다.
-> replace있잖아요! -> replace조차 새로운 String변수에 담아줘야 한다. 기존에 있던 문자열을 변경하는게 아니다.
선언 | stack | heap | 메소드(Constant Pool) | |
int age = 25; | age = 25 | x | x | |
double price = 100.5; | price = 100.5 | x | x | |
String name = "이름"; | name = 100 | 이름 | ||
String hobby = new String("게임"); | hobby = 200 | 게임 |
* 소수에서는 new를 사용하지 않고 String name = "이름" 이라고 작성해도,
heap에 저장된다고 표현하기도 한다. 하지만 그건 소수만 그렇고 일반적으로는 constant Pool. 메소드 영역에 저장된다라고 알고 있는게 좋다.
* new를 사용할 경우 100% heap에 저장되는게 맞다.
프로그래밍은 원래 과학, 우주, 국방 등 속도와 정확도가 중요한 분야에서 사용되었다.
이는 우리 주변 인간사에서는 절차적 언어가 부적합하다.
(인간사회는 느리고 정확도가 떨어져도 편리한게 좋음, 인간사회는 너무 복잡함)
그래서 "객체지향언어"가 각광받기 시작했다.
객체지향언어는 절차지향언어에 비해 느리지만, 다양성을 존중한다.
OOP 객체지향언어
- Inheritance, Encapsulation, Polyporphism, Abstraction
Inheritance
Object : 현실세계에 존재하는 객체들 ex) 사람A, 사람B...
Class : 그룹 ex) 사람이라는 그룹
Polyporphism 2가지
1. type : 1개의 type이 여러개의 type을 받을 수 있다.
2. method : overloading(동일한 이름으로 다양한 메소드를 만들 수 있다.)
overriding(상속)
'하고싶은거 > Java' 카테고리의 다른 글
디자인 패턴 feat. 유레카 (0) | 2024.06.19 |
---|---|
강제 타입 변환 feat. 유레카 (0) | 2024.06.13 |
객체 상속 feat. 유레카 (0) | 2024.06.12 |
java 기초 + eclipse 관련 내용 feat. 유레카 (0) | 2024.06.10 |
#개발 #게임 #일상
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!