java๋ฅผ ๊ณต๋ถํ๋ฉฐ ๊ธฐ๋กํ ๋ด์ฉ์ ๋๋ค.
JAVA์ ๋์๊ณผ์
๊ฐ์ฒด์งํฅ ์ธ์ด์ ์ฅ์
1. ์์ ๊ธฐ๋ฅ์ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค.
2. ์ผ์์ํ ๋ชจ์ต์ ๊ตฌ์กฐ๊ฐ ๊ฐ์ฒด์ ์์ฐ์ค๋ฝ๊ฒ ๋ น์๋ค์ด ์๊ธฐ ๋๋ฌธ์ ์๊ฐํ๊ณ ์๋ ๊ฒ์ ๊ทธ๋๋ก ์์ฐ์ค๋ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
3. ์ ์ค๊ณ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ๋ ๋ฆฝ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ํฅ์์ํฌ ์ ์์.
๊ฐ์ฒด์งํฅ ์ธ์ด์ ๋จ์
1. ๊ฐ์ฒด๊ฐ ์ฒ๋ฆฌํ๋ ค๋ ๊ฒ์ ๋ํ ์ ํํ ์ดํด๊ฐ ํ์ํ๊ธฐ์ ์ค๊ณ๋จ๊ณ๋ถํฐ ๋ง์ ์๊ฐ์ด ์๋ชจ๋๋ค.
2. ๊ฐ์ฒด์งํฅ ์ธ์ด๋ ๋์ฒด์ ์ผ๋ก ์คํ์๋๊ฐ ๋๋ฆฌ๋ค.
3. ๋ค์ค์์์ด ์ง์๋๋ c++์ ๊ฒฝ์ฐ์๋ ๋๋ฌด ๋ณต์กํด์ ธ ์ฝ๋ฉ์ ๋์ด๋๊ฐ ์์นํ ์ ์๋ค.
์๋ฐ ํ๋ก๊ทธ๋จ ์คํ๊ณผ์
1. ์๋ฐ์ปดํ์ผ๋ฌ(javac)์ ์ํด์ .java ์์ค์ฝ๋๋ฅผ ์๋ฐ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ๋ณํ์ํจ๋ค.
2. Class Loader๋ฅผ ํตํด class ํ์ผ๋ค์ jvm์ผ๋ก ๋ก๋ฉํ๋ค.
3. ๋ก๋ฉ๋ class ํ์ผ๋ค์ Execution engine์ ํตํด ํด์๋๋ค.
4. ํด์๋ ๋ฐ์ดํธ์ฝ๋๋ Runtime Data Areas์ ๋ฐฐ์น๋์ด ์ค์ง์ ์ธ ์ํ์ด ์ด๋ฃจ์ด์ง๊ฒ ๋๋ค.
5. ์ด๋ฌํ ์คํ๊ณผ์ ์ jvm์ ํ์์ ๋ค๋ผ Thread Synchronization ๊ณผ GC๊ฐ์ ๊ด๋ฆฌ์์ ์ ์ํํ๋ค.
JVM์ ๊ตฌ์กฐ
jvm์ ํฌ๊ฒ ํด๋์ค ๋ก๋(Class Loader), ์คํ์์ง(Execution Engine), ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ(Runtime Data Area)๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
ํด๋์ค๋ก๋๋ class ํ์ผ์ jvm๋ด๋ก ๋ก๋ํ๋ ์ญํ ์ ์ํํ๋ฉฐ, ์คํ์์ง์ ๋ก๋๋ class ํ์ผ์ jvm ๋ด๋ถ์์ ๊ธฐ๊ณ๊ฐ ์คํํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ด๋ ์ธํฐํ๋ฆฌํฐ์ Just In Time ๋ฐฉ์์ด ์์ต๋๋ค. ํด์๋ ๋ฐ์ดํธ์ฝ๋(.classํ์ผ)์ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ ์ ๋ฐฐ์น๋์ด ์ค์ง์ ์ธ ์ํ์ด ์ด๋ฃจ์ด์ง๊ฒ ๋ฉ๋๋ค. ๋ํ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ heap ์์ญ์ GC์ ๋์์ด ๋ฉ๋๋ค.
- Class Loader
- jvm๋ด๋ก ํด๋์ค ํ์ผ์ ๋ก๋ํ๊ณ , ๋งํฌ๋ฅผ ํตํด ๋ฐฐ์นํ๋ ์์ ์ ์ํํ๋ ๋ชจ๋
- Execution Engine(์คํ ์์ง)
- ํด๋์ค๋ฅผ ์คํ์ํค๋ ์ญํ .
- ์๋ฐ ๋ฐ์ดํธ์ฝ๋(.class)๋ ๊ธฐ๊ณ๊ฐ ๋ฐ๋ก ์ํํ ์ ์๋ ์ธ์ด๋ณด๋ค๋ ๋น๊ต์ ์ธ๊ฐ์ด ๋ณด๊ธฐ ํธํ ํํ๋ก ๊ธฐ์ ๋ ๊ฒ.
- ์คํ ์์ง์ ์ด์ ๊ฐ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ค์ ๋ก jvm๋ด๋ถ์์ ๊ธฐ๊ณ๊ฐ ์คํํ ์ ์๋ ํํ๋ก ๋ณ๊ฒฝํ๋ค. ์ด ๋ ๋๊ฐ์ง ๋ฐฉ์์ ์ฌ์ฉ
- Interpreter(์ธํฐํ๋ฆฌํฐ)
- ์คํ ์์ง์ ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ช ๋ น์ด ๋จ์๋ก ์ฝ์ด์ ์คํํ๋ค. ์ด ๋ฐฉ์์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ ๋จ์ ์ ๊ทธ๋๋ก ๊ฐ๊ณ ์๋ค. ํ ์ค์ฉ ์ํํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค๋ ๊ฒ
- JIT(Just-In-Time)
- ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ๋จ์ ์ ๋ณด์
- ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ์คํํ๋ค๊ฐ ์ ์ ํ ์์ ์ ๋ฐ์ดํธ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณ๊ฒฝํ๊ณ , ์ดํ์๋ ๋ ์ด์ ์ธํฐํ๋ฆฌํ ํ์ง ์๊ณ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ง์ ์คํํ๋ ๋ฐฉ์์ด๋ค. JIT์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ๋ ๊ณผ์ ์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ธํฐํ๋ฆฌํ ํ๋ ๊ฒ ๋ณด๋ค ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก ํ ๋ฒ ๋ง ์คํ๋๋ ์ฝ๋๋ผ๋ฉด ์ปดํ์ผํ์ง ์๊ณ ์ธํฐํ๋ฆฌํ ํ๋๊ฒ์ด ์ ๋ฆฌํ๋ค.
- Interpreter(์ธํฐํ๋ฆฌํฐ)
- ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ(Runtime Data Area)
- ํ ์์ญ(Heap)
- ๊ฐ์ฒด์ ๋ฐฐ์ด, ์ธ์คํด์ค ๋ณ์๊ฐ ํ ๋น๋๋ ์์ญ
- ๋ชจ๋ thread์์ ๊ณต์ ๋๋ ํน์ง์ด ์์. gc๊ฐ ๋์ํ๋ ์์ญ
- young ์์ญ๊ณผ old ์์ญ์ผ๋ก ๋๋๋ฉฐ, young ์์ญ์ eden ์์ญ๊ณผ 2๊ฐ์ survivor ์์ญ์ผ๋ก ๋๋์ด์ง
- ์คํ ์์ญ(Stack)
- ๋ฉ์๋ ํธ์ถ ์ ์ง์ญ ๋ณ์, ๋งค๊ฐ๋ณ์, ํจ์ ํธ์ถ๋ด์ญ ๋ฑ์ด ์ ์ฅ๋๋ ์์ญ.
- ๊ฐ ์ค๋ ๋๋ง๋ค ๊ฐ๋ณ์ ์ผ๋ก ์์ฑ๋๋ฉฐ, ๋ฉ์๋ ํธ์ถ ์ ์์ฑ๋์๋ค๊ฐ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด ์ฌ๋ผ์ง.
- ๋ฉ์๋ ์์ญ(Method Area) (=ํด๋์ค=์คํํฑ)์์ญ
- ํด๋์ค, ๋ฉ์๋ ์ ๋ณด์ ํด๋์ค ๋ณ์(static int) ์ ๋ณด ์ ์ฅ
- ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ์์ญ
- PC ๋ ์ง์คํฐ
- ๊ฐ ์ค๋ ๋๋ง๋ค jvm์ด ์ํํ ๋ช ๋ น์ด์ ์ฃผ์๊ฐ ์ ์ฅ๋๋ ์์ญ
- ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ
- ์๋ฐ๊ฐ ์๋ ๋ค๋ฅธ ์ธ์ด๋ก ์คํ๋ ๋ฉ์๋๋ค์ ์คํํ๊ธฐ ์ํ ์คํ์์ญ
- ํ ์์ญ(Heap)
GC์ ๋์ ๊ณผ์
- gc๋ ํฌ๊ฒ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๋ ๋์ ๊ฐ์ฒด๋ฅผ ์๋ณํ๋ mark๊ณผ์ ๊ณผ ์ด๋ฅผ ์ ๊ฑฐํ๋ sweep ๊ณผ์ ์ด ๋ฐ๋ณต๋ฉ๋๋ค. heap ๋ฉ๋ชจ๋ฆฌ์ young์์ญ(Eden, Survivor0, Survivor1)์ ๋ํด์ minor gc๊ฐ ์ํ๋๊ณ old์์ญ์ผ๋ก promotion ๋ ๊ฐ์ฒด๋ค์ ๋ํด์ major gc๊ฐ ์งํ๋ฉ๋๋ค. ์ด๋ old์์ญ์ด young์์ญ๋ณด๋ค ํฌ๊ธฐ๋๋ฌธ์ major gc์ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ major gc์๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
- ์ฒ์ ์์ฑ๋ ๊ฐ์ฒด๋ Young Generation์ Eden ์์ญ์ ์์น
- Eden์์ญ์ด ๋ค์ฐจ๊ฒ ๋๋ฉด minor gc๊ฐ ์ํ
- mark ๋์์ ํตํด์ unreachableํ ๊ฐ์ฒด๋ฅผ ํ์
- Eden์์ญ์์ reachable์ธ ๊ฐ์ฒด๋ survivor ์์ญ์ผ๋ก ์ด๋
- Eden์์ญ์์ unreachable์ธ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ (sweep)
- ์ด์๋จ์ ๋ชจ๋ ๊ฐ์ฒด์ age ๊ฐ์ด ์ฆ๊ฐ
- ๋๋ค์ Eden์์ญ์ด ๋ค์ฐจ๊ฒ ๋๋ฉด minor gc๊ฐ ์ํ
- Old Generation ์์ญ์ด ๋ค์ฐจ๊ฒ ๋๋ฉด major gc๊ฐ ์ํ
์๋ฐ์์๋ ๊ฐ๋ฐ์๊ฐ ๋ง์๋๋ก ๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํฌ ์ ์์ต๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ ์ ํ ์์ ์ ์๋์ผ๋ก ์์งํ์ฌ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐํ์ํต๋๋ค.
์๋ฐ๊ฐ ๊ฐ๋น์ง๋ฅผ ์ด๋ป๊ฒ ์์๋ผ๊น?
์ฐธ์กฐํ๋ ๋ํผ๋ฐ์ค๊ฐ ํ๋๋ ์๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๊ฐ๋น์ง๋ก ํ๋จํฉ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ๊ฐ์ ์์ฒญ
System.gc(); // ๊ฐ๋น์ง ์ปฌ๋ ์
๊ฐ์ ์์ฒญ
ํ์ง๋ง ์ด ๋ฌธ์ฅ์ ํธ์ถํ๋ค๊ณ ํด์ ์ฆ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์๋ํ๋ ๊ฒ์ ์๋๋๋ค.
(๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ํ์ํ๋ค๋ ์์ฒญ์ ๋ถ๊ณผํฉ๋๋ค.)
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์๋ฐ ํ๋ซํผ์ด ์ ์ ์ผ๋ก ํ๋จํ์ฌ ์ ์ ํ ์์ ์ ์๋์ํต๋๋ค.
โSystem.gc() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์์คํ ์ ์ฑ๋ฅ์ ๋งค์ฐ ํฐ ์ํฅ์ ๋ผ์น๋ฏ๋ก ์ ๋๋ก ์ฌ์ฉํด์๋ ์๋๋ค๊ณ ํฉ๋๋ค. (https://d2.naver.com/helloworld/1329)
JAVA์ ํน์ง๊ณผ ๋ฉ์๋
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
์ฅ์ : ๋ธ๋ก ํํ์ ๋ชจ๋ํ๋ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅ, ์ ๋ขฐ์ฑ ๋์ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ, ์ถ๊ฐ/์์ /์ญ์ ์ฉ์ด, ์ฌ์ฌ์ฉ์ฑ ๋๋ค.
OOP is A PIE
A (Abstraction) : ์ถ์ํ, ํ์ค ์ธ๊ณ์ ๊ฐ์ฒด๋ฅผ ์ถ์ํํด์ ํด๋์ค๋ฅผ ๊ตฌ์ฑํ๋ค.
P (Polymorphism) : ๋คํ์ฑ, ํ๋์ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ๊ฐ์ง ํ์ ์ผ๋ก ์ฐธ์กฐํ ์ ์๋ค. ์ฌ๊ธฐ์๋ ์์ ๊ด๊ณ์ ๋คํ์ฑ์ ์ด์ผ๊ธฐ
I (Inheritance): ์์, ๋ถ๋ชจ ํด๋์ค์ ์์ฐ์ ๋ฌผ๋ ค๋ฐ์ ์์์ ์ ์ํจ์ผ๋ก ์ฝ๋์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
E (Encapsulation) : ๋ฐ์ดํฐ ์๋๊ณผ ๋ณดํธ, ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์ ์ง์ ๋ ธ์ถ์ํค์ง ์๊ณ ๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ณดํธํ ์ ์๋ค
ํ์ค ์ธ๊ณ ๊ฐ์ฒด, ํด๋์ค, ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด์ ๊ด๊ณ
ํ์ค์ ๊ฐ์ฒด๊ฐ ๊ฐ๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ถ์ํ ๋์ด ํด๋์ค์ ์ ์๋๋ค.
ํด๋์ค๋ ๊ตฌ์ฒดํ ๋์ด ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๊ฐ ๋๋ค.
Object : ์ค์ธ๊ณ์ ์กด์ฌํ๋ ๊ฒ, ์ ์ผ์ฑ์ ๊ฐ์ง
Class : ์ค์ธ๊ณ์ ์กด์ฌํ๋ ๊ฒ์ ์ปดํจํฐ๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด Class๋ฅผ ์ฌ์ฉ
Instance : newํด๋์ค(์์ฑ์)๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ฅผ ์์ฑ
์๋ฐ : static type (๋ณ์๋ฅผ ์ ์ธํ ๋ ๋ฐ์ดํฐ ํ์ ์ ์ฌ์ ์ ์ ์ธํด์ผ ํจ)
ํ์ด์ฌ : dynamic type
์๋ฐ๋ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ก ๋ค๋ฃน๋๋ค.
๋ฐฐ์ด์ length ํ๋๊ฐ ์์)
๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ(=์ ์ ๋ฐ์ธ๋ฉ)
- ๋ฉ์๋ ์ด๋ฆ์ด ๋์ผํ์ฌ์ ํฉ๋๋ค.
- ๋งค๊ฐ๋ณ์์ ๊ฐ์๋ ํ์ ์ด ์๋ก ๋ฌ๋ผ์ผ ํฉ๋๋ค.
class Test{
public int getSum(int i,int j){
return i+j;
}
public double getSum(int i,int j){ // ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ ์คํจ, ์ปดํ์ผ ์ค๋ฅ ๋ฐ์
return (double)(i + j);
}
}
๋ฆฌํดํ์ ์ ๋ฉ์๋๋ฅผ ๊ตฌ๋ถํ๋ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ค.
static์ด๋ private ๋๋ final๋ก ์ ์ธ๋ ๋ฉ์๋๋ ์๋ธ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ(=๋์ ๋ฐ์ธ๋ฉ) ํ ์ ์๋ค.
์ค๋ฒ๋ผ์ด๋ฉ(=๋์ ๋ฐ์ธ๋ฉ)
์คํํ ๋ฉ์๋๋ฅผ ์ปดํ์ผ ์์ ๊ฒฐ์ ํ์ง ์๊ณ ์คํ ์(๋ฐํ์)์ ๊ฒฐ์ ํ๋ ๊ฒ์ ๋งํจ.
์ด๋ฅผ ํตํด ์๋ฐ๋ ์ค๋ฒ๋ผ์ด๋ฉ๋ ๋ฉ์๋๊ฐ ํญ์ ์คํ๋๋๋ก ๋ณด์ฅํ๋ค.
์๋ฐ๋ semi boolean(1 ์ ์ฐธ, 0 ์ ๊ฑฐ์ง๊ณผ ๊ฐ์ bool์ ์๋์ง๋ง bool์ฒ๋ผ ์ฌ์ฉ๊ฐ๋ฅํ ๊ฒฝ์ฐ)์ ์ง์ํ์ง ์๋๋ค ⇒ true false๋ง ์ง์ํ๋ค
int(4byte) ๋ -20์ต ~ 20์ต ๊น์ง ํํ๊ฐ๋ฅ
๋ฌต์์ ํ ๋ณํ : ์์ ํฌ๊ธฐ์ ํ์ ์ ํฐ ํฌ๊ธฐ์ ํ์ ์ผ๋ก ์๋ ํ ๋ณํ๋จ.
๋ช ์์ ํ ๋ณํ : ํฐ ํฌ๊ธฐ์ ํ์ ์ ์์ ํฌ๊ธฐ์ ํ์ ์ผ๋ก ๋ณํํ๋ ค๋ฉด ๋ช ์์ ์ผ๋ก ํ์ํด์ค์ผ ํจ(๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์์)
์ ์ํ์ ๊ธฐ๋ณธ์ int์ด๋ค.
int i1 = Integer.MAX_VALUE;
long l1 = (long)(i1 + 1);
System.out.println(l1);
๊ฐ์ด ๊นจ์ง๋ค (์ฐ์ฐ์ ๊ธฐ๋ณธ๋จ์๋ int์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๊ฐ์ด ๊นจ์ง ์ํ๋ก ์ฐ์ฐ์ด ์ํ๋๋ค)
int i1 = Integer.MAX_VALUE;
long l2 = (long)i1 + 1;
System.out.println(l2);
๊ฐ์ด ๊นจ์ง์ง ์๊ณ ์คํ๋๋ค.
์ค์ํ์ ๊ธฐ๋ณธ์ double์ด๋ค.
- float(4byte)
- double(8byte)
public class A {
public static void main(String[] args) {
float f1 = 2.0f; // f๋ฅผ ์ ์ด์ค์ผ ํ๋ค (2.0์ผ๋ก ์ ์ผ๋ฉด doubleํ์ด ๊ธฐ๋ณธ)
float f2 = (float)2.0; // ํน์ ํ์
์บ์คํ
์ ํด์ฃผ๋ฉด ๋๋ค.
double d1 = 4.0;
}
}
์ค์์ ์ฐ์ฐ์ ๋ถ์ ํํ๋ค.
์ค์๋ ๊ทผ์ฟ๊ฐ์ผ๋ก ๊ณ์ฐํ๋ค.
์ค์๋ฅผ ์ ์๋ก ๋ฐ๊ฟ์ ๊ณ์ฐํ๊ณ ๋ค์ ์ค์๋ก ๋ฐ๊พธ๋ ๋ฐฉ์์ผ๋ก ์ ํ์ฑ์ ํด๊ฒฐํ ์ ์๋ค.
double d1 = 2.0;
double d2 = 1.1;
double result = ((int)(d1*100)-(int)(d2*100))/100.0;
๋ฌธ์ '0' : 48
๋ฌธ์ 'A'๋ 65
shift ์ฐ์ฐ
์ ์์์๋ง ์ฐ์ธ
<< ํ ๋ฒ์ ๊ณฑํ๊ธฐ 2
>> ํ ๋ฒ์ ๋๋๊ธฐ 2
(s = s<<10) == (s*=1024)
ํด๋์ค๋ณ์(=static๋ณ์)
public class Solution {
static int[] a ;
public static void main(String[] args) {
System.out.println(a);
}
}
์ถ๋ ฅ์ผ๋ก null์ด ๋์จ๋ค.
ํด๋์ค ๋ณ์์ ๊ฒฝ์ฐ ์ด๊ธฐํ๋์ด ์์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก 'null'๊ฐ์ ๊ฐ์ง.
Arrays.copyOf()
int[][] originalArray = {{1,2,3},{4,5,6},{7,8,9}};
int[][] copiedArray = new int[originalArray.length][];
for(int i=0;i<originalArray.length;i++){
copiedArray[i] = Arrays.copyOf(originalArray[i],originalArray[i].length);
}
๊น์๋ณต์ฌ๋ฅผ ์ํํด์ค๋ค.
(์ฌ๊ธฐ์ ์ฒ๋ผ 2์ฐจ์ ๋ฐฐ์ด copiedArray๋ฅผ ์์ฑํ ๋ ํ ๋ถ๋ถ๋ง ํฌ๊ธฐ๋ฅผ ์ค์ ํด์ค ์ ๋ ์๋ค.)
Arrays.copyOfRange()
int[] arr = {0,1,2,3,4,5};
int[] arr1 = Arrays.copyOfRange(arr,0,3);
// [0,1,2]
int[] arr2 = Arrays.copyOfRange(arr,3,arr.length);
// [3,4,5]
ํน์ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด ์๋ฅด๋ ํจ์
ํ๋์ ํด๋์ค์ ๋ํด ๋ฐฑ๊ฐ๋ฅผ ์ธ์คํด์คํ ํด๋ method๋ ํ๋๋ง ๋ง๋ค์ด์ง๋ค.
reference type๊ณผ wrapper ํด๋์ค ๋น๊ต
reference type์ primitive type์ด ์๋ ๋ชจ๋ ์ ํ์ ๋ํ๋
wrapperํด๋์ค๋ primitive type์ ๊ฐ์ฒด๋ก ํํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณต
์ฆ wrapperํด๋์ค๋ reference type์ด์ง๋ง, ๋ชจ๋ reference type์ด wrapper ํด๋์ค๋ ์๋.
์ค๋ฒ๋ผ์ด๋ฉ : ์์ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค๊ฐ ์ฌ์ ์ํด์ ์ฌ์ฉ
์ค๋ฒ๋ก๋ฉ : ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋ ์ฌ๋ฌ๊ฐ๋ฅผ ๊ฐ์ง๋ฉด์ ๋งค๊ฐ๋ณ์์ ์ ํ๊ณผ ๊ฐฏ์๊ฐ ๋ค๋ฅด๋๋ก ํ๋ ๊ธฐ์
HashSet์๋ฃ๊ตฌ์กฐ๋ ๋ด๋ถ์ ์ผ๋ก HashMap ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ArrayList์ contains๋ ์๊ฐ๋ณต์ก๋๊ฐ O(n)์ด๊ณ HashSet์ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๊ฐ O(1) ์ด๋ค.
๋ฉ์๋
String
String์ immutableํ๋ค.
String str = "mincheol";
// ๋น ๋ฌธ์์ด ์ฒดํฌ
str.isEmpty();
// ๋ฌธ์ ์ฐพ๊ธฐ
str.charAt(0); // 'm' : char ๋ฌธ์ ๋ฐํ
str.indexOf("m"); // 0 : ์ธ๋ฑ์ค ๋ฐํ
str.lastIndexOf("h") // 4 : ๋ง์ง๋ง์ผ๋ก ๋ฌธ์๊ฐ ์ํ ์ธ๋ฑ์ค ๋ฐํ
// ๋ฌธ์ ์๋ฅด๊ธฐ
str.substring(1,3); // "in" : ์ธ๋ฑ์ค 1 ์ด์ 3๋ฏธ๋ง ์์น์ ๋ฌธ์์ด ๋ฐํ
str.substring(3); // "min" : ์ธ๋ฑ์ค 3 ๋ฏธ๋ง ์์น์ ๋ฌธ์์ด ๋ฐํ
// ๋ฌธ์ ๋น๊ต
/**
* str์ด "mincheoz"์ ๊ฐ์ผ๋ฉด 0
* str์ด "mincheoz"๋ณด๋ค ์ฌ์ ์์ผ๋ก ์์ด๋ฉด -1
* str์ด "mincheoz"๋ณด๋ค ์ฌ์ ์์ผ๋ก ๋ค๋ฉด 1
*/
str.compareTo("mincheoz"); // -1
// ๋ฌธ์ ํฌํจ์ฌ๋ถ ํ๋จ
str.contains("min");
// ๋ฌธ์์ด ๋ถ๋ฆฌ
str.split(" "); // ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด str์ ๋ถ๋ฆฌํ์ฌ String[] ๋ฐฐ์ด๋ก ๋ณํ
str.split(""); // ๋์ด์ฐ๊ธฐ ์๋ ๋ฌธ์์ด str์ ํ ๋ฌธ์์ฉ ๋ถ๋ฆฌํ์ฌ String[] ๋ฐฐ์ด๋ก ๋ณํ
// ๋ฌธ์ ์๋ค ๊ณต๋ฐฑ ์ ๊ฑฐ
str.trim(); // str์ ์๋ค ๊ณต๋ฐฑ์ ์ ๊ฑฐ. ๋ฌธ์์ด ์ฌ์ด์ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ์ง ์์
// ๋ฌธ์ <-> ์ซ์ ๋ณํ
Integer.parseInt("100");
Integer.toString(100);
StringBuilder
String์ immutable ํ๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ๋ง๋ค์ด์ง๋ฉด ๋ฌธ์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ StringBuilder๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
StringBuilder sb = new StringBuilder();
sb.append("apple");
// ํน์ ์ธ๋ฑ์ค์ ๋ฌธ์ ์ฝ์
sb.insert(2,"oo"); // "apoople"
// ๋ฌธ์์ด ์ญ์
sb.delete(0,2); // "oople"
// ํน์ ์ธ๋ฑ์ค ๋ฌธ์ ์ญ์
sb.deleteCharAt(2); // "oole"
// ํน์ ์ธ๋ฑ์ค ๋ฌธ์ ๋ณ๊ฒฝ
sb.setCharAt(1,'p'); // "ople"
// ๋ฌธ์์ด ๋ค์ง๊ธฐ
sb.reverse(); // "elpo"
// ๋ฌธ์์ด ๊ธธ์ด ์ค์ด๊ธฐ
sb.setLength(2); // "el"
// ๋ฌธ์์ด ๊ธธ์ด ๋๋ฆฌ๊ธฐ (๋ค์ ๋ฌธ์๋ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์์ง)
sb.setLength(4); // "el "
List ๊ด๋ จ ๋ฉ์๋
List<Integer> list = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list.add(0);
// ํน์ ์ธ๋ฑ์ค์ ์์ ์ฝ์
list.add(0, 1);
System.out.println(list.toString()); // [1, 0]
// ๋ฆฌ์คํธ ๋ณํฉ(์ถ๊ฐ๋๋ ๋ฆฌ์คํธ๊ฐ ๋ค๋ก ์ด)
list.addAll(list2);
// ํน์ ์์์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค ๋ฐํ
list.indexOf(0); // 1
// ํน์ ์์์ ๋ง์ง๋ง ์ธ๋ฑ์ค ๋ฐํ
list.lastIndexOf(0); // 1
// ํน์ ์ธ๋ฑ์ค์ ๊ฐ ์ญ์
list.remove(0); // ๊ฒฐ๊ณผ : [0]
// ํน์ ์์์ ๊ฐ ์ญ์
list.remove(Integer.valueOf(0)); // ๊ฒฐ๊ณผ : [1]
// ๋ฆฌ์คํธ ์ฐจ์งํฉ
list.removeAll(list2); // list์์ list2์ ์๋ ๋ชจ๋ ๊ฐ์ ์ญ์
// ๋ฆฌ์คํธ ๊ต์งํฉ
list.retainAll(list2); // list์์ list2์ ์๋ ๊ฐ์ ์ ์ธํ ๋ชจ๋ ๊ฐ์ ์ญ์
// ํฌํจ์ฌ๋ถ ์ฒดํฌ
list.contains(1);
// ๋ฆฌ์คํธ์ ๋ค๋ฅธ ๋ฆฌ์คํธ ์์๊ฐ ์ ๋ถ ํฌํจ๋์ด ์๋์ง ์ฌ๋ถ ์ฒดํฌ
list.containAll(list2); // list์ list2์ ๋ชจ๋ ๊ฐ์ด ํฌํจ๋์ด ์์ผ๋ฉด true
// ๋๋ค์ ์ฌ์ฉํด์ ์์๋ค ์ ๊ฑฐ
list.removeIf(x -> x%2==0) // list์์ ์ง์์ธ ์๋ฅผ ๋ชจ๋ ์ ๊ฑฐ
๋ฐฐ์ด <-> ๋ฆฌ์คํธ
// ๋ฐฐ์ด์ ๋ฆฌ์คํธ๋ก ๋ณํ
String[] temp = {"apple", "banana", "lemon"};
List<String> list = new ArrayList<>(Arrays.asList(temp));
// ๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ณํ
List<String> list = new ArrayList<>();
String[] temp = list.toArray(new String[0]); // new String[0] ํด์ฃผ๋ฉด ์์์ ์ฌ์ด์ฆ ๋ง๊ฒ ๋ฐฐ์ด ์์ฑ
// List๋ฅผ int๋ฐฐ์ด๋ก ๋ณํ
List<Integer> list = new ArrayList<>();
int[] temp = list.stream().mapToInt(x -> x).toArray();
Arrays.asList์ return ๊ฐ์ java.util.Arrays.ArrayList ๋ก, java.util.ArrayList์ ๋ค๋ฅด๋ค.
๊ทธ๋ฆฌ๊ณ immutableํ๋ค.
๋ฐ๋ผ์
List<String> list = Arrays.asList("a","b","c");
์ ๊ฐ์ด ์์ฑํ ArrayList๋ immutableํ๋ฏ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
List<String> list = new ArrayList<>(Arrays.asList("a","b","c"));
์ ๊ฐ์ด ํด์ค์ผ ํ๋ค.
๋ฆฌ์คํธ ์์ฑ๊ณผ ๋์์ ์ด๊ธฐํ
List<String> list = new ArrayList<>(){{
add("a");
add("b");
add("c");
}};
Collections ๊ด๋ จ ๋ฉ์๋
Integer[] arr = {1,2,3,10,28};
List<Integer> list = new ArrayList<>(Arrays.asList(arr));
// ์ ์ํ List ์์ ์ค ์ต๋, ์ต์๊ฐ
Collections.max(list);
Collections.min(list);
// List ์ ๋ ฌ
Collections.sort(list);
Collections.sort(list,Collections.reverseOrder());
// List ๋ค์ง๊ธฐ
Collections.reverse(list);
// List ๋ด ์์์ ๊ฐฏ์ ๋ฐํ
Collections.frequency(list,3);
// ์ด์งํ์
Collections.binarySearch(list,10);
Collections.max()์ ์๊ฐ๋ณต์ก๋๋ O(n)์ ๋๋ค.
Deque
Deque<Integer> q = new ArrayDeque<>();
q.offer(1);
q.offer(2);
q.offer(5);
q.contains(1); // true
q.remove(5);
contains ํจ์๊ฐ ์๋ค.
removeํจ์๋ ์๋ค. ์๊ฐ๋ณต์ก๋๋ O(n).
PriorityQueueํจ์๋ removeํจ์๊ฐ ์๋ค. ์๊ฐ๋ณต์ก๋๋ ์ญ์ ํ๋ ์๊ฐ n๊ณผ ์ญ์ ํ ๋ค์ ์ฐ์ ์์๋ก ์ ๋ ฌํ๋ ์๊ฐ logn์ ์๊ฐ์ด ๊ฑธ๋ ค์ O(n + logn) ์ธ๋ฐ n์ด ์ง๋ฐฐํ๋ฏ๋ก O(n)์ด ๋๋ค.
HashMap
HashMap<Integer,String> hashMap = new HashMap<>();
hashMap.put(1,"๋ธ๊ธฐ");
hashMap.put(2,"๋ฐ๋๋");
hashMap.put(3,"์ฌ๊ณผ");
hashMap.remove(1); // key๊ฐ 1์ธ ์์ ์ญ์
hashMap.containsKey(1); // key ํฌํจ์ฌ๋ถ ํ์ธ
hashMap.containsValue("์ฌ๊ณผ"); // value ํฌํจ์ฌ๋ถ ํ์ธ
for(Integer key : hashMap.keySet()){
System.out.println(key + " " + hashMap.get(key));
}
for(String value : hashMap.values()){
System.out.println(value);
}
keySet() : key๊ฐ๋ค ๋ค
values() : value๊ฐ๋ค ๋ค
hashMap์ value๋ก hashMap์ ํ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๊ฐ ์์ด์ ์ ์
Map<String, Object> genresMap = new HashMap<>();//<์ฅ๋ฅด, ๊ณก ์ ๋ณด>
Map<String, Integer> playMap = new HashMap<>(); //<์ฅ๋ฅด, ์ด ์ฅ๋ฅด ์ฌ์์>
List<Integer> resultAL = new ArrayList<>();
for(int i = 0; i < genres.length; i++){
String key = genres[i];
HashMap<Integer, Integer> infoMap; // ๊ณก ์ ๋ณด : <๊ณก ๊ณ ์ ๋ฒํธ, ์ฌ์ํ์>
if(genresMap.containsKey(key)){ // ํด๋น ์ฅ๋ฅด๊ฐ genreMap์ ์์ผ๋ฉด?
infoMap = (HashMap<Integer, Integer>)genresMap.get(key);
}else {
infoMap = new HashMap<Integer, Integer>();
}
infoMap.put(i, plays[i]);
genresMap.put(key, infoMap);
genreMap์ ๊ฒฝ์ฐ value๊ฐ์ผ๋ก ๋ ๋ค๋ฅธ HashMap์ ๊ฐ์ง๊ณ ์์.
์ฅ๋ฅด ๋ณ ๊ณก ์ ๋ณด๋ฅผ ๊ฐ์ง genreMap์ <์ฅ๋ฅด : ๊ณก ์ ๋ณด>
๊ณก ์ ๋ณด๋ฅผ Objectํ์ผ๋ก ์ ์ธํ ๋ค, ํ ๋ณํ์ ํด์ฃผ๊ณ ์๋ค.
๊ณก์ ๋ณด infoMap๋ <๊ณก ๊ณ ์ ๋ฒํธ : ์ฌ์ํ์> ์ด๋ค.
'๐์ธ์ด:Language' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Python (0) | 2023.05.03 |
---|