자바의 언어(클래스와 인스턴스)

sisun·2023년 4월 12일
0

백엔드

목록 보기
10/12

자바는 객체지향 언어이다.

프로그램을 구상하는 요소 = 객체
이것이 상호적용 하도록 프로그래밍 하는 것이 객체지향 프로그래밍

자바는 객체를 만들기 위해 클래스를 만들어야 한다.
↪why❓ 클래스는 객체를 만들기 위한 틀이기 때문이다.


🚗 자동차에 비교를 해보자 🚗

🚘 자동차 설계도 = 클래스 (객체를 만들기 위한 틀)📜
🚘 자동차 = 객체 (객체를 만들기 위해 클래스를 먼저 만들어야한다.) 📐
🚘 자동차의 필수옵션 = 메소드 ⚙️
🚘 자동차의 이름, 번호판, 기능 = 필드(field) 🚙 (이러한 속성을 자바에선 필드라고 부른다.)
🚘 자동차의 3D 설계도 = 인스턴스(Instance) 🚓

객체는 클래스의 인스턴스이며, 클래스📜 에는 메소드 ⚙️필드 🚙 가 들어가있음
인스턴스 🚓객체📐에 포함된다고 볼 수 있다.

객체(Object) 와 인스턴스 (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 연산자를 만들고 인스턴스를 생성한다면 무조건 힙 영역에 새로운 인스턴스를 생성한다.


String클래스

  • 문자열을 표현하는 자바에서 가장 많이 사용하는 클래스
  • 한번 생성된 클래스는 변하지 않는다. (String클래스는 불변 클래스)
    substring(3) = 인덱스 3번까지 잘라주세요 => 인덱스 3이후만 나옴 그 이후
    string을 다시 출력하면 값이 변하지 않고 원래대로 나온다. => 수행 후 새로 만들어서 반환한다.

new 연산자를 이용하지 않고 인스턴스를 만들 수 있다.

String str1 = "hello";
String str2 = "hello";

new를 이용해서도 인스턴스를 생성할 수 있다.

String str3 = new String("hello");
String str3 = new String("hello");
같은 값인지 equals 를 사용하면 값만 계산할 수 있다.

String 클래스의 메소드

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
profile
풀스택 국비수강중

0개의 댓글