일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 패스트캠퍼스부트캠프
- 부트캠프
- 프로젝트
- 개인프로젝트
- 자바스크립트 코딩테스트
- 자바스크립트
- js코테
- 프론트엔드부트캠프
- 패캠
- 프론트엔드
- JS
- 깃허브
- 프로그래머스
- 코딩테스트
- FE
- 딥러닝
- 개발 프로젝트
- 깃
- 개발블로그
- Java
- 프로그래머스 JS 코테
- 패캠부트캠프
- 프론트엔드개발자
- 국비지원
- 프로그래머스코테
- 영상처리
- pokeapi
- 미니 프로젝트
- 패스트캠퍼스
- 국비지원취업
- Today
- Total
가쟤의 해변일기 🐳
풀스택 과정 3일차 본문
💡 2025. 04. 11 수업 이슈
- 객체 생성의 원리와 Memory Allocation ⭐
- DataType
- Constructor ⭐
클래스 - 표준화, 일반화 하는 능력이 중요하다고 한다.
Clothing t = new Shirt();는 Shirt의 부모클래스로 업캐스팅 하는 것이므로
추상적으로 포괄하는 객체를 생성할 수 있다.
생성자 (Constructor)
Shirt t = new Shirt() ← 이 부분이 생성자이다.
생성자는 객체가 생성될 때마다 동작하는 것이다.
메소드 정의 = 메소드 선언부 + 메소드 구현부
값을 주입하는 통로는 단 두 가지이다.
명시적 생성자
setter
이 둘의 차이는 라이프사이클이다.
명시적 생성자를 생성하고 값을 주입하면 라이프사이클이 끝난다.
setter로 값을 주입하면 다른 라이프사이클을 갖는다.
- 하나의 클래스에는 반드시 하나 이상의 생성자가 존재한다.
- 개발자가 명시적 생성자를 넣어주면 그때는 기본 생성자가 자동으로 들어가지 않는다. 필요하면 이때는 직접 기본생성자를 정의해야 한다.
- 명시적 생성자가 하는 일은 필드초기화이다.
- 기본 생성자는 아무일도 하지 않는다. 단지 타입만 맞춰줄 뿐이다.
- 명시적 생성자는 setter 메소드와 동일한 작업을 하지만 리턴 타입이 없기 때문에 메소드는 아니다.
- 생성자는 클래스의 구성요소 즉, 멤버가 아니기 때문에 메모리에 올라가는 대상이 아니다.
- 생성자 앞의 Access Modifier(접근 지정자)는 class를 따라간다.
Data Type
Java나 C에서는 꼭 변수 타입을 지정해줘야 한다. ➡ 정적 값 할당
반면 Python이나 JS는 자동으로 변수 타입을 정해준다. ➡ 동적 값 할당
자바의 기본형 데이터타입이다.
정수에서는 int가 기본, 실수에서는 double이 기본이다.
package com.edu.datatype.test;
public class DataTypeTest {
public static void main(String[] args) {
byte a = 127;
System.out.println("a==>" + a);
}
}
여기서 변수 a는 로컬 변수 이다.
class 바로 밑이 아닌 메소드 안에 선언되었기 때문이다 !! ㅇㅁㅇ
package com.edu.datatype.test;
public class DataTypeTest {
int c;
public static void main(String[] args) {
c = 100;
}
}
이렇게 하면 에러가 난다.
➡ int c; 는 인스턴스 변수 즉, 객체를 만들어야만 존재하는 변수이다.
class에서 선언된 것은 호출을 해야만 사용할 수 있기 때문이다.
package com.edu.datatype.test;
public class DataTypeTest {
int c;
public static void main(String[] args) {
DataTypeTest test = new DataTypeTest();
test.c = 100;
}
}
굳이 하자면 이렇게 할 수 있다.
long, float, double 타입은 값 뒤에 무조건 데이터 타입이 생략되어져 있다.
값비교 이전에 타입을 먼저 비교한다.
float salary = 300.34
➡ float salary = 300.34f;
L, F, D (대소문자 가능)을 뒤에 붙이면 된다.
package com.edu.datatype.test;
public class DataTypeTest {
int c;
public static void main(String[] args) {
short x, y, c;
x = 1;
y = 2;
c = x + y;
}
}
이게 에러가 난다…!
실제값 1 + 2면 에러가 안 나는데,
실제값이 아니기 때문에 타입 비교가 안 된다.
사칙 연산이 적용되면 int로 형변환되기 때문에 int가 short에 들어갈 수 없다.
사칙 연산 ➡ 승격
(short) (x * y) 나 (short) x * (short) y 를 해주면 된다.
메모리 할당
- Shirt s;를 하면 JVM의 stack 부분에 s라는 이름(변수명)으로 공간이 할당된다.
- s = new Shirt(”옷”, 100, false);를 하면 힙 영역에 필드 변수의 공간이 잡히고, 기본값(디폴트값)으로 할당된다(⭐묵시적 초기화는 무조건 진행됨). → null, 0, false가 기본값으로 들어감.
- 힙 영역에 잡힌 곳에 주소값이 잡힌다.
- 힙 영역에 잡힌 객체의 주소값이 만약 1007이라고한다면, s = 1007 주소값이 할당된다.
- 스택에 있는 s에서 힙에 있는 객체를 가리키는 참조가 일어난다. (reference value - 참조변수)
- 생성자 구동에 의한 초기화가 이루어진다.(명시적 초기화의 경우에만)
기본 생성자, 명시적 생성자 모두 묵시적 초기화가 반드시 일어나고, 명시적 생성자는 그 후에 값 초기화가 진행된다.
이 그림은 코드를 짜고 내가 만든거다.
재밋군.
'풀스택과정' 카테고리의 다른 글
풀스택과정 2주차 - JavaDoc | Array | 가위바위보 리팩토링 팀작업 (2) | 2025.04.16 |
---|---|
풀스택과정 2주차 - 조건문 | 반복문 | Encapsulation (1) | 2025.04.15 |
풀스택 과정 2주차 - Scanner | 가비지컬렉션 | Short Circuit (2) | 2025.04.14 |
풀스택 과정 2일차 (0) | 2025.04.10 |
풀스택 과정 1일차 (0) | 2025.04.10 |