일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 스마트인재개발원 #광주인공지능학원 #JavaScript #Web #Java
- #시그모이드 #광주인공지능학원 #스인개
- 생성자 #메소드랑 햇갈려 #생성자랑 메소드는 다른거지롱 #객체생성 #new 연산자 #인스턴스화 #인스턴스 생성
- 변수의 범위 #Scope #scope #Static #static #지역변수 #전연변수 #global #local
- 메소드 오버로딩 #Method Overloading #오버로딩 #중복정의 #Overloading
- 연산자 #일치연산자 #기본연산자 #불일치연산자
- 참조(Reference)타입 #클래스
- RPA #실습 #라이브러리 #RPA라이브러리 #task #Process #Task #Assign #변수
- this. #this #this키워드 #객체 자신 참조 #필드호출 #메소드호출
- String Class #String #Class
- 스마트인재개발원 #스마트인재캠퍼스 #MLP #이미지분석 #AI #인공지능 #머신러닝 #딥러닝
- 순전파 #역전파 #MLP
- Brity #Brity Assistant #ChatBit #챗봇 #자연어 처리 #Brity RPA #삼성SDS #대화분석 #대화설계
- 열거형 #enum #JDK5
- #Brity #BrityRPA #FlowControl
- Java #JAVA #자바 #java기초 #java입문 #java #자바 개념 #programming #공부 #개발 공부 #코드 정리 #코딩테스트 #알고리즘
- RPA #실습 #라이브러리 #RPA라이브러리 #task #Process #Task
- 대화설계 #시나리오 설계 #Flowchart #플로우차트 작성
- SQLD #DDL #DML #DCL #TCL #DB #SQLP #DataBase #자격증 # IT #명령어 #SQL #쿼리
- Class #class #reference
- VDI #DRM #디지털 저작권 관리 #가상 데스크톱 인프라 #용어 #IT용어 #개발자 #신입
- 스마트인재개발원 #광주인공지능학원 #JavaScript #JS #형변환 #자바스크립트 #Web #back-end #front-end
- Brity Assistant #대화분석 #설계 #ChatBot #변수 #학습 #대화학습 #동의어 #동의어 처리 #단어사전
- Class #클래스 #Java #JAVA #자바 #java기초 #java입문 #java #자바 개념 #programming #공부 #개발 공부 #코드 정리 #코딩테스트 #알고리즘
- 학습하기 #봇 학습 #테스트 방법 #디버깅
- field #Field #Method #method #필드 #속성 #메소드 #행동 #객체 #Class구성요소
- Brity #BrityRPA #FlowControl
- For #Loop #반복문
- 스마트인재개발원 #deep learning #MLP #다층 레이어 퍼셉트론 #퍼셉트론 #선형분류 #다중 선형분류 #AI #머신러닝 #뉴런 #신경망
- RPA #실습 #라이브러리 #RPA라이브러리 #task #Process #Task #Script #ExecuteScript
- Today
- Total
코딩몬
[Java] Class 본문
Java는 객체지향 언어다.
여기서 객체지향 프로그래밍이란,
: 프로그램을 구성하는 요소들 즉, 객체들이 상호작용하도록 프로그래밍 하는것을 뜻한다.
Java는 객체를 생성하기 위해 반드시 Class를 먼저 만들어야 한다.
여기서 Class란,
: 객체를 생성하기 위한 설계도, 틀 을 의미한다.
ex>
클래스(Class) | 객체(Object) |
붕어빵 틀 | 붕어빵 |
자동차 설계도 | 자동차 |
* 클래스 선언
붕어빵 이라는 객체를 생성하기 위한 붕어빵 틀인 BoongBBang클래스 생성
- BoongBBang.java 파일을 생성한다.
- 저장을 하면 eclipse는 컴파일을 진행하여 디스크에 BoongBBang이라는 클래스를 생성한다.
- 붕빵 클래스가 생성되었다고 해서 붕어빵 객체가 만들어진 것은 아니다.(붕어빵 틀만 만들었다고 붕어빵이 짠 하고 나오는게 아니잖아..?)
- 클래스(붕빵 틀)을 만들었다면 이제 붕어빵을 만들러 가 보자.
public class BoongBBang{
}
* 객체 생성
붕어빵 이라는 객체를 생성하기 위해 Main Method가 있는 붕어빵 생성 Class를 만들자
public class MakeBoongBBang{
public static void main(String args[]){
BoongBBang b1 = new BoongBBang();
BoongBBang b2 = new BoongBBang();
}
}
- 앞서 만들어준 붕어빵 틀 BoongBBang Class타입
- b1, b2 라는 이름의 객체를 참조하는 변수(레퍼런스 변수)
- new 연산자 : new연산자 뒤에 나오는 생성자를 이용하여 메모리에 객체를 만들라는 명령
- 위의 코드를 실행시켰을 시, BoongBBang이라는 객체 2개가 만들어지고, 각각의 객체를 참조하는 b1과 b2변수가 선언이 된다.
[ new 연산자 ]
메모리(Heap 영역)에 데이터를 저장할 공간을 할당받고,
그 공간의 참조값(reference value / 해시코드 / 메모리 주소)를 객체에게 반환한 뒤,
생성자를 호출한다.
* new 연산자의 작동 원리
public class Main{
public static void main(String[] arge){
String str = new String("문자열");
}
}
위 코드는 "문자열"이라는 값을 담고있는 String객체를 생성하는 코드이다.
str이라는 변수는 Stack영역에 할당이 되고,
new String으로 생성된 "문자열"이라는 데이터 값이 Heap영역의 메모리 공간을 할당받는다.
이때, str변수는 Class타입으로 선언된 레퍼런스 변수이기 때문에, Heap영역에 있는 "문자열"이라는 데이터값이 존제하는 메모리 공간의 주소를 가리키고 있게 된다.
이러한 방식으로 작동하기 때문에, 만약 str2라는 변수를 하나 더 생성한 뒤 같은 값인 "문자열"이라는 값을 주어도
Heap메모리상에 새로운 영역을 할당받아 생성하므로 str2는 처음 생성한 "문자열"이라는 값을 가리키지 않는다.
(새로운 영역에 생성된 "문자열"을 가리킴)
때문에 str과 str2를 출력시켜보면 각각 다른 주소값이 출력된다.
(new 연산자로 값을 할당하지 않고, 리터럴 방식으로 값을 주었을 경우에는 출력시 같은 주소값이 나온다.)
* 리터럴 방식
변하지 않는 고정된 데이터를 할당하는 방식
public class Main{
public static void main(String[] args){
String str = "문자열";
String str2 = "문자열";
}
}
위 코드의 동작 방식을 살펴보자
코드를 보면, str 과 str2라는 변수에 각각 "문자열"이라는 동일한 값으로 초기화를 시켜주었다. -> 리터럴 방식
이 경우 "문자열"이라는 값은 Constant Pool이라는 메모리 영역에 할당이 된다.
하지만, "문자열" 이라는 값을 str, str2로 두 번 호출하고 있는데 똑같은 값을 메모리에 여러 번 할당하면 메모리 낭비가
일어난다.
그래서 Java는 똑같은 값을 또 호출했을 때, 전에 할당했던 메모리 주소를 넘겨주게 된다.
str == str2의 값이 true가 나오는 이유 역시 위와 동일한 이치로, str 과 str2가 같은 메모리 주소를 가리키고 있기 때문
이다.
(참고로, == 는 메모리 주소를 비교한다! 값 자체를 비교하는것이 아님! 세상에...)
'Java > Java 기초' 카테고리의 다른 글
[Java] 열거형(enum) (0) | 2021.10.21 |
---|---|
[Java] 변수의 범위(Scope)와 static (0) | 2021.10.21 |
[Java] Class 의 구성요소 필드(Field), 메소드(Method) (0) | 2021.10.21 |
[Java] String Class (0) | 2021.10.20 |
[Java] 참조(Reference)타입 / 클래스,객체,인스턴스 (0) | 2021.10.20 |