프로그램을 구상하는 요소 = 객체
이것이 상호적용 하도록 프로그래밍 하는 것이 객체지향 프로그래밍
자바는 객체를 만들기 위해 클래스를 만들어야 한다.
↪why❓ 클래스는 객체를 만들기 위한 틀이기 때문이다.
🚘 자동차 설계도 = 클래스 (객체를 만들기 위한 틀)📜
🚘 자동차 = 객체 (객체를 만들기 위해 클래스를 먼저 만들어야한다.) 📐
🚘 자동차의 필수옵션 = 메소드 ⚙️
🚘 자동차의 이름, 번호판, 기능 = 필드(field) 🚙 (이러한 속성을 자바에선 필드라고 부른다.)
🚘 자동차의 3D 설계도 = 인스턴스(Instance) 🚓
객체는 클래스의 인스턴스이며, 클래스📜 에는 메소드 ⚙️ 와 필드 🚙 가 들어가있음
인스턴스 🚓는 객체📐에 포함된다고 볼 수 있다.
클래스의 타입으로 선언시 객체라고 부르며, 그 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다.
객체는 현실 세계에 가깝고, 인스턴스는 소프트웨어(가상) 세계에 가깝다.
https://velog.io/@si9138/string
자바의 변수타입은 기본타입과 참조타입으로 나뉜다
기본 타입은 정수형(byte,short,int,long),실수형(float,double),문자형(char),논리형(boolean)이며,
참조 타입은 기본형 타입을 제외한 모든 타입이다. 앞에서 배웠던 배열, 클래스 모두 참조형이다.
기본타입으로 선언된 변수와 참조 타입으로 선언된 변수의 차이점은 저장되는 값이 다르다.
기본타입은 실제 값을 변수 안에 저장하지만 참조타입은 메모리의 번지를 변수 안에 저장한다.
(예시)
기본타입 = int i = 4; i는 4다.
참조타입 = String str = new String("Hello")
기본형 타입이 아닌 String 클래스
가 적혀있으며 이퀄(=)
뒤에 new
뒤에 생성자가 있으며,
str변수는 String 인스턴스를 참조한다
new
라는 키워드는 객체를 메모리에 올려주며 이렇게 메모리에 올라간 객체는 "인스턴스"라고 말한다
번지를 통해 객체를 참조한다는 뜻에서 참조 타입이라고 불린다
참조타입은 배열타입, 열거타입, 클래스 , 인터페이스가 있다.
기본형 타입과 참조타입의 차이를 알기 위한 메소드 호출 (메소드 전달받은 값 1씩 더했을 때 출력 결과가 다른 이유)
https://school.programmers.co.kr/learn/courses/5/lessons/357
자바의 메모리 영역에는 메소드 영역|stack영역|Heap영역 으로 나누어져 있다.
메소드 영역은 jvm이 시작할 때 생성되고 모든 클래스가 공유하는 영역
힙영역은 객체와 배열이 생성되는 영역
jvm 스택영역은 메소드를 호출할 때마다 프레임을 추가하고 메소드 종료시 프레임 제거 동작 수행.
new 연산자를 만들지 않고 인스턴스를 생성한다면 Hello라는 인스턴스가 상수(변하지 않는 값)으로 만들어지며,
같은것이 있다면 새로 만들지 않고 생성돼있는 상수를 가르킨다.
즉 , 같은 인스턴스를 참조하고 있다.
>
new 연산자를 만들고 인스턴스를 생성한다면 무조건 힙 영역에 새로운 인스턴스를 생성한다.
substring(3) = 인덱스 3번까지 잘라주세요 => 인덱스 3이후만 나옴
그 이후new 연산자를 이용하지 않고 인스턴스를 만들 수 있다.
String str1 = "hello";
String str2 = "hello";
new를 이용해서도 인스턴스를 생성할 수 있다.
String str3 = new String("hello");
String str3 = new String("hello");
같은 값인지equals
를 사용하면 값만 계산할 수 있다.
String str = new String();
string
을 사용하기 위해 선언을 한 뒤 사용한다.문자열 길이 구하기(length)
str.length()
=> str이 참조하는 문자열의 길이를 구해서 int타입으로 리턴해주는 메소드System.out.println(str.length());
문자열 붙이기 (concat)
str.concat("world")
메소드는 str이 참조하는 문자열 hello 에다가 메소드의 인자로 들어온 문자열 world를 붙혀서 String 타입으로 리턴하는 메소드- String Class는 불변 클래스로, 메소드가 수행되면 새로운 문자열을 만든다.
String str = new String("hello"); System.out.println(str.concat(" world")); //출력결과 hello world System.out.println(str) //출력결과 hello
문자열 자르기 (subString)
str.subSting(1,3)
은 str이 참조하는 문자열을 인덱스 1번부터 3번까지 자른 결과이다.str.subString(2)
은 str이 참조하는 문자열을 2번 인덱스부터 마지막까지 자른 결과를 의미한다.- 문자열의 인덱스는 0번부터 시작한다.
System.out.println(str.substring(1,3)); //출력결과 el System.out.println(str.substring(2)); //출력결과 llo world