Skip to content

Commit

Permalink
Merge pull request #32 from m020202/main
Browse files Browse the repository at this point in the history
[2주차/제이] 워크북 제출합니다.
  • Loading branch information
m020202 authored Oct 4, 2024
2 parents e2a5f8f + 2967a90 commit a9cda45
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
59 changes: 59 additions & 0 deletions mission/chapter02/java_mission.md
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>: 가장 빠른 임의 접근 속도, 순서를 예측할 수 없다.
45 changes: 45 additions & 0 deletions mission/chapter02/mission.md
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}';
```

0 comments on commit a9cda45

Please sign in to comment.