-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #32 from m020202/main
[2주차/제이] 워크북 제출합니다.
- Loading branch information
Showing
2 changed files
with
104 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
## ✅ static | ||
<e>static</e> 키워드는 클래스 멤버(변수 & 메서드)에 대해 사용되는 키워드로, <br> | ||
특정 객체가 아닌 <u>클래스 자체에 속하는 것</u>을 의미한다. <br> | ||
<e>static</e>을 사용하면 클래스 로딩 시점에 메모리 할당이 이루어지며, | ||
해당 클래스의 <b><u>모든 인스턴스에 의해 공유된다.</u></b> | ||
|
||
### ✔️ 특징 | ||
* 클래스 수준의 변수 및 메소드 | ||
* 'static' 변수와 메소드는 클래스 레벨에 존재하므로 클래스의 <u>모든 인스턴스에 공유된다.</u> | ||
* 인스턴스를 따로 생성하지 않고도 클래스 이름만으로 직접 호출할 수 있다. | ||
* 인스턴스화 없이 사용 가능 | ||
* 인스턴스를 따로 생성하지 않고도 직접 접근하거나 사용할 수 있다. | ||
* ex, <e>System.out.println();</e> 에서 'out' 은 'System' 클래스의 'static' 멤버이기 때문에 | ||
따로 'System' 이라는 객체를 생성할 필요 없이 바로 클래스 단위에서 사용할 수 있다. | ||
|
||
### ✔️ 주의사항 | ||
* 'static' 변수는 모든 인스턴스에 의해 공유되므로, 여러 스레드에서 <u>동시에 접근 시 동기화 문제가 발생할 수 있다.</u> | ||
* 너무 많은 'static' 멤버를 사용하면 객체 지향의 장점을 잃을 수 있다. | ||
--- | ||
|
||
## ✅ JVM 메모리 & Class Loader | ||
### ✔️ JVM이란❓ | ||
* JVM은 Java Virtual Machine의 약자로, 자바 가상 머신이라고 부른다. | ||
* 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다.<br> | ||
* 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행되며, 다른 하드웨어와 다르게 <u>레지스터 기반이 아니라 스택 기반으로 동작한다.</u> | ||
|
||
### ✔️ 자바 프로그램 실행 단계 | ||
Java Code(.java) ➡️ JAVAC compiler ➡️ Byte Code(.class) ➡️ JVM ➡️ 각 운영체제 | ||
* 먼저, 자바 컴파일러에 의해 자바 소스 파일은 바이트 코드로 변환된다. | ||
* 이러한 바이트 코드를 JVM에서 읽어들인 다음에, 내부 과정을 거쳐서 어떤 운영체제 간에 프로그램을 실행할 수 있도록 만들어 준다. | ||
|
||
### ✔️ Class Loader | ||
* JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈. | ||
* 런타임 시에 동적으로 클래스를 로드한다. | ||
|
||
### ✔️ Class Loader 와 static 간의 관계 | ||
* 클래스 로더는 프로그램 실행 중 클래스가 처음 참조될 때 메모리에 클래스를 로드하고 <b>Method 영역</b>에 저장된다. | ||
* 이 과정에서 'static' 변수는 초기화 되고, 'static' 초기화 블록이 생성된다. | ||
|
||
<b>❓그러면 static이 아닌 인스턴스 멤버의 메모리 할당 과정은 어떻게 될까? </b> | ||
* 객체는 <b>Heap 영역</b>에 할당된다. Heap은 동적으로 생성되는 객체들이 저장되는 영역이다. | ||
* 즉, 각 객체마다 자신만의 인스턴스 변수 공간을 가진다. | ||
--- | ||
|
||
## ✅ Collection 인터페이스 | ||
```collection```인터페이스는 자바에서 데이터를 저장하고 관리할 수 있도록 설계된 상위 레벨의 인터페이스이다.<br> | ||
다양한 타입의 컬렉션을 만들 수 있도록 다른 인터페이스나 클래스를 확장하고 구현하는 <b><u>기본 인터페이스</u></b>이다. | ||
|
||
### ✔️ Collection 종류 | ||
1. <b>List</b> (ArrayList, LinkedList, Vector) | ||
* 순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다. | ||
* <b>ArrayList</b>: 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어서 조회 기능에 성능이 뛰어나다. | ||
2. <b>Map</b> (HashMap, HashTable, TreeMap) | ||
* 키 (key), 값 (value)의 쌍으로 이루어진 데이터 집합이다. | ||
* 순서가 유지되지 않으며, 키의 중복을 허용하지 않으나 값의 중복은 허용된다. | ||
* <b>HashMap</b>: 중복과 순서가 허용되지 않으며 null 값이 올 수 있다. | ||
3. <b>Set</b> (HashSet, TreeSet) | ||
* 순서를 유지하지 않는 데이터의 집합으로, 데이터의 중복을 허용하지 않는다. | ||
* <b>HashSet</b>: 가장 빠른 임의 접근 속도, 순서를 예측할 수 없다. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
### ✅ 내가 진행 중, 진행 완료한 미션 모아서 보는 쿼리 | ||
|
||
```sql | ||
SELECT m.reward, m.deadline, mission_spec | ||
FROM mission as m | ||
JOIN member_mission as mm ON m.id = mm.mission_id | ||
JOIN member as mem ON mm.member_id = mem.id | ||
WHERE mm.status = 'IN_PROGRESS' OR mm.status = 'DONE' | ||
LIMIT 15 OFFSET 0 * 15; | ||
``` | ||
|
||
### ✅ 리뷰 작성하는 쿼리 | ||
|
||
```sql | ||
INSERT INTO review VALUES ('{member_id}', '{store_id}', '{body}', '{score}'); | ||
``` | ||
|
||
### ✅ 홈 화면 쿼리 | ||
|
||
```sql | ||
SELECT s.name, m.mission_spec, m.deadline | ||
FROM mission as m | ||
JOIN store as s ON m.store_id = s.id | ||
JOIN region as r ON s.region_id = r.id | ||
JOIN member_mission as mm ON m.id = mm.mission_id | ||
WHERE r.name = '미추홀구' | ||
AND mm.member_id = '{해당 멤버 id}' | ||
AND mm.status = 'NOT_STARTED'; | ||
AND m.deadline > NOW() | ||
ORDER BY m.deadline | ||
LIMIT 15 OFFSET 0; | ||
``` | ||
|
||
### ✅ 마이페이지 화면 쿼리 | ||
|
||
```sql | ||
// 이름, 이메일 휴대폰 번호, 포인트 조회 쿼리 | ||
SELECT | ||
name, | ||
email, | ||
COALESCE(phone_num, '미인증') as phone_num, | ||
point | ||
FROM member; | ||
WHERE id = '{해당 멤버 id}'; | ||
``` |