๐ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋ฉด์ ๋๋น
๋ฐฑ์๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋ฉด์ ๋๋น ์ง๋ฌธ ๋ฐ ๋ด์ฉ๋ค์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ ์๋ฃ์ ๋๋ค.
์ง๋ฌธ์๋ฃ List
CS
- ์ค๋ ๋์ ํธ๋์ญ์
- ๋ฉํฐํ๋ก์ธ์ค์ ๋ฉํฐ์ค๋ ๋
- ๋ก์ปฌ๋ณ์, ๋ฉค๋ฒ๋ณ์, ์ ์ญ๋ณ์
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- class, instance์ ์ฐจ์ด
- ๊ฐ์ฒด์งํฅ ๋์์ธ ํจํด
- Stateful์ Stateless์ ์ฐจ์ด์
Web
- ์ธํฐ๋ท์ ๋์์๋ฆฌ
- ์น์ ๋์์๋ฆฌ
- HTTP
- Restful API๋
- gRPC(google remote procedure cell)
- Web Server์ WAS์ ์ฐจ์ด
- XML๊ณผ JSON์ ์ฐจ์ด ๋ฐ ์ฅ๋จ์
- XML์์ node, element, attribute์ ์ฐจ์ด ๋ฐ ์ฉ๋
- JSON์์ {}์ []์ ์ฉ๋
Algorithm & Data Structure
Database
- ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณ ์ข ๋ฅ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทํ
- Outer join์ด๋?
- View๋?
- Index๋?
- Stored procedure๋?
- Transaction๋?
Spring
- Spring์ ์ฌ์ฉํ๋ ์ด์
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ์ฐจ์ด
- AOP, DI, Interceptor, Filter
- ์คํ๋ง์์์ reqeust ์ฒ๋ฆฌ์์
- PSA portable service abstraction ์ถ์ํ ์๋น์ค
- Spring vs Spring boot
Java
- ์๋ฐ์ ์ค๋ ๋ฉ
- Hibernate
- ์๋ฐ์ ํ์ด์ฌ ์ฐจ์ด, ์ฅ๋จ์
- class, abstract class, interface
- public, protected, private
- this, super
- static, final
- ๋ฐ์ดํฐ ํ์ ์ค primitive type, reference type
- process์ thread ์ฐจ์ด ๋ฐ ์ฉ๋, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๋ง๋ค ์ ์๋์ง
- ์ง๋ ฌํ๋
- @Override
- ๋ฐฐ์ด๊ณผ ArrayList์ ์ฐจ์ด
- try, catch, finally์ ๊ฐ๋ ๋ฐ ์ฉ๋
CS
์ค๋ ๋์ ํธ๋์ญ์
- ์ค๋ ๋๋ ํ๋ก์ธ์ค์์ ์คํ๋๋ ๋
๋ฆฝ์ ์ธ ์คํ ๋จ์
- ํ๋์ ํ๋ก์ธ์ค์๋ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋
- ๋์์ฑ ์ง์์ ์ํ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ๋จ์
- ๋ณ๋ ฌ์ฒ๋ฆฌ๋ ๋ณต์์ CPU ์ฝ์ด ๋๋ ํ๋ก์ธ์๋ฅผ ํ์ฉํด์ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
- ํธ๋์ญ์
์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์์
์ ACID ์ ๋ง๊ฒ ์์์ , ์ผ๊ด์ , ๊ฒฉ๋ฆฌ์ , ์ง์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋
- ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ์์ ๋จ์๋ก ์ฒ๋ฆฌ
๋ฉํฐํ๋ก์ธ์ค์ ๋ฉํฐ์ค๋ ๋
- ํ๋ก๊ทธ๋จ๋ ์ฝ๋์ ์งํฉ, ๊ทธ ํ๋ก๊ทธ๋จ์ด
RAM
์์ ๋์ํ๋ ์ํ๊ฐ ํ๋ก์ธ์ค - ํ๋์ ์ ์ฅ๋ ๋ฆฌ์์ค ๋ฐ ์ฝ๋๋ก ๊ตฌ์ฑ๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ์์ ํ๋ก์ธ์ค๋ก ๋์ํ๊ฒ ๋ฉ๋๋ค. ์ค๋ ๋๋ ํ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ๋์์ ํ๋ฆ์ ์๋ฏธํฉ๋๋ค.
- ์ปดํจํฐ์ ๋ฉํฐ์์ ์ ์ํด ํ๋ก์ธ์ค๋ง์ ์ด์ฉํ ๊ฒฝ์ฐ ์ปดํจํฐ ๋ฆฌ์์ค๋ฅผ ๋๋ฌด ๋ง์ด ์ฐจ์งํ๊ฒ ๋๋๋ฐ, ์ค๋ ๋๋ ํ ํ๋ก์ธ์ค์์ heap ์์์ ๊ณต์ ํ๋ฉด์ stack์ ํ ๋น๋ฐ๋ ํํ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์๋์ ์ผ๋ก ์์ต๋๋ค.
- ๋ฉํฐ ํ๋ก์ธ์ค๋ ํ๋ก์ธ์ค ์ฌ๋ฌ ๊ฐ๋ก ๋์ํ๋ ๊ฒ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์์ํ๊ณ ๋์ ์๊ฐ์ด ๋ง์ด ๋ ๋ค. ํ์ง๋ง ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ ๊ฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ด ๊ฐ๋ฅํ๋ค.
- ๋ฉํฐ ์ค๋ ๋๋ ํ ํ๋ก์ธ์ค ์์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์ํ๋ ๊ฒ
- ์ด๋ค ํ๋ก๊ทธ๋จ์ด ๋ฉํฐ ํ๋ก์ธ์ค์ธ์ง ๋ฉํฐ ์ค๋ ๋๋ก ๋๋ ๊ฑด์ง์ ๋ํด
- ๋ฉํฐ์ค๋ ๋ ์ธ์ด: Java, C#
- ๋ฉํฐ์ค๋ ๋ & ๋ฉํฐํ๋ก์ธ์ค ์ธ์ด: Python, C, C++
๋ก์ปฌ๋ณ์, ๋ฉค๋ฒ๋ณ์, ์ ์ญ๋ณ์
- ์ธ ๊ฐ์ง ๋ณ์๋ ๋ณ์์ ๋ฒ์์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ํตํด ๊ตฌ๋ณ๋๋ฉด, ์ฝ๋์ ๊ตฌ์กฐ์ ๋์์ ์ค์ํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ๋ก์ปฌ๋ณ์๋ ํจ์ ๋ด๋ถ์์ ์ ์ธํ๊ณ ํจ์ ์คํ๋์ค์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ฉค๋ฒ๋ณ์๋ ํด๋์ค ๋ด๋ถ์์ ์ ์ธ๋๋ฉฐ, ํด๋น ํด๋์ค ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ๋์ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฐ์ฒด์ ์์ฑ์ ์๋ฏธํฉ๋๋ค.
- ์ ์ญ๋ณ์๋ ํ๋ก๊ทธ๋จ ์ ์ฒด ์์ญ์์ ์ ๊ทผํ ์ ์๋ ๋ณ์์ ๋๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๋ฐ์ดํฐ๋ฅผ ์ถ์ํํ๊ณ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ก ๋ง๋ค์ด ๊ฐ์ฒด ๊ฐ ์ํธ์์ฉ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๋ฐฉ๋ฒ
- ๊ฐ์ฒด๋ ๋ฐ์ดํฐ ๋๋ ์๋ณ์์ ์ํด ์ฐธ์กฐ๋๋ ๊ณต๊ฐ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ์ 3๋ ์์: ์บก์ํ, ๋คํ์ฑ, ์์
4๊ฐ์ง ํน์ง๊ณผ ๋ฌ๋ฆฌ 3์์์๋ ์ถ์ํ๊ฐ ๋น ์ง๋๋ฐ ์ ์ด๋ฐ๊ฒจโฆ
- ์ถ์ํ, ์บก์ํ, ์์, ๋คํ์ฑ
- ์ถ์ํ: ๊ฐ์ฒด์์ ๊ณตํต๋ ์์ฑ๊ณผ ํ์๋ฅผ ์ถ์ถ
- ์บก์ํ: ๋ฐ์ดํฐ ๊ตฌ์กฐํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๊ฒฐํฉ์์ผ ๋ฌถ๋ ๊ฒ, class
- ๋คํ์ฑ: ํ๋์ ๋ณ์๋ช , ํจ์๋ช ์ด ์ํฉ์ ๋ฐ๋ฅธ ๋ค๋ฅธ ์๋ฏธ๋ก ํด์๋ ์ ์๋ ๊ฒ
class, instance์ ์ฐจ์ด
- ํด๋์ค๋ ๊ฐ์ฒด์ ๊ตฌ์กฐ์ ํ๋์ ์ ์ํ๊ณ , ๋ณ์์ ๋ฉ์๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- ์ธ์คํด์ค๋ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ์ค์ ๊ฐ์ฒด! ํด๋์ค์ ์ค์ฒดํ๋ ํํ
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name} is barking!")
# ๊ฐ์ฒด(์ธ์คํด์ค) ์์ฑ
my_dog = Dog(name="Buddy")
๊ฐ์ฒด์งํฅ ๋์์ธ ํจํด
์์ฑํจํด: Singleton, Factory Method, Abstract Factory, Builder, Prototype
๊ตฌ์กฐํจํด: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
ํ์ํจํด: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor
- Singleton ํจํด
- ํน์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ํ๋๋ง ์์ฑ๋๋๋ก ๋ณด์ฅํ๋ ํจํด
- ์ ์ญ๋ณ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋ฆฌ์์ค์ ์ ๊ทผ ์ ์ด๋ ์ค๋ณต ์์ฑ์ ๋ฐฉ์งํ๋๋ฐ ์ ์ฉํฉ๋๋ค.
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
Stateful์ Stateless์ ์ฐจ์ด์
- Stateless ์์คํ ์ ์ด์ ์ ์ํธ์์ฉ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์์ต๋๋ค. ์, HTTP ํ๋กํ ์ฝ
- Stateful์ ์ํ์ ์ง๋ก ์ด์ ์ ์ํธ์์ฉ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ ์งํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๊ทธ์ธ ์ธ์ ์ ์๋ก ๋ค ์ ์์ต๋๋ค.
Web
์ธํฐ๋ท์ ๋์์๋ฆฌ
- ์ธํฐ๋ท์ ๋คํธ์ํฌ ์ธํ๋ผ, ์น์ ์ธํฐ๋ท ์์์ ๋์ํ๋ ์๋น์ค
- ์ธํฐ๋ท ์์์ ๋์ํ๋ ์๋น์ค๋ ๊ทธ ์ธ์๋ ์ด๋ฉ์ผ, ํ์ผ๊ณต์ ์๋น์ค, ์คํธ๋ฆฌ๋ฐ ์๋น์ค, ํด๋ผ์ฐ๋ฉ ์ปดํจํ ์๋น์ค, ์จ๋ผ์ธ ๊ฒ์ ์๋น์ค ๋ฑ์ด ์์ต๋๋ค.
- ์น ๋ง๊ณ ๋ ์ด๋ฉ์ผ์ ์ํํธ์จ์ด๋ก๋ ๋ณด๋ผ ์ ์์ผ๋๊น SMTP, POP3 ๋ฑ..
- ์ปดํจํฐ - ๋ผ์ฐํฐ - ISP - ISP - ๋ผ์ฐํฐ - ์ปดํจํฐ
- ์ธํฐ๋ท ์๋น์ค ์ ๊ณต์ ์ฒด(Internet Service Provider, ISP)๋ ์ฐ๊ฒฐ๋๋ ๋ผ์ฐํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ค๋ฅธ ISP ๋ผ์ฐํฐ์ ์์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ปดํจํฐ์์ IP์ฃผ์ or ๋๋ฉ์ธ ์ด๋ฆ์ ํตํด ๋ฉ์์ง๋ฅผ ๋ง์ ํน์ ์ปดํจํฐ๋ฅผ ์ง์
์น์ ๋์์๋ฆฌ
- ํด๋ผ์ด์ธํธ๋ ์น ์ฌ์ฉ์์ ์ธํฐ๋ท์ด ์ฐ๊ฒฐ๋ ์ฅ์น, ์๋ฒ๋ ์น์ฌ์ดํธ, ์ฑ ๋ฑ์ ์ ์ฅํ๋ ์ปดํจํฐ
- ๋ธ๋ผ์ฐ์ ์ฃผ์ ์ ๋ ฅ - DNS ์๋ฒ - IP์ฃผ์ ์๋ฒ์ HTTP ์์ฒญ (TCP/IP ์ฐ๊ฒฐ๋ก ์ ์ก) - ์๋ต๊ณผ ์น์ฌ์ดํธ ํ์ผ์ธ ๋ฐ์ดํฐ ํจํท์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก - ๋ธ๋ผ์ฐ์ ์์ ์น ์ฌ์ดํธ๋ก ์กฐ๋ฆฝํด์ ๋ณด์ฌ์ค
HTTP(HyperText Transfer Protocol)
- ์น ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ
- HTTPS(secure version of HTTP)๋ SSL/TLS ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ์ก์ ์ํธํํ๊ณ ๋ณด์์ ์ ๊ณตํฉ๋๋ค.
- SSL(secure sockets layer)์ TLS(transport layer security)๋ ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์กํ๊ธฐ ์ํด ์ค๊ณ๋ ์ํธํ ํ๋กํ ์ฝ์ ๋๋ค. SSL์ ์๋ ๋ท์ค์ผ์ดํ์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ, TLS๋ ๊ทธ ์ดํ์ IETF(Internet Engineering Task Force)์ ์ํด SSL์ ํ์คํ๋ ๋ฒ์ ์ผ๋ก ๊ฐ๋ฐ๋์์ต๋๋ค.
Restful API๋
- HTTP ๊ธฐ๋ฐ์ ์น ์๋น์ค์ ์ํคํ ์ฒ ์คํ์ผ, ๋ฆฌ์์ค๋ฅผ ํํํ๊ณ ์ํ ์ ๋ฌ์ ์ํ ์น API ๋์์ธ ์์น
- ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ์ ์ผ๊ด์ฑ
- GET, POST, PUT, DELETE
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ๋ณด๋ฅผ ์์ฒญํ๊ฑฐ๋ ์ ์กํ๋ ๋ฐฉ๋ฒ์ผ๋ก HTTP ๋ฉ์๋ ์ข ๋ฅ
- GET์ ์ฃผ๋ก ์๋ฒ์์ ์ ๋ณด๋ฅผ ๊ฒ์ํ๋๋ฐ ์ฌ์ฉ๋๊ณ ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
- POST๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๊ฑฐ๋ ์ ์ฅํ๋๋ฐ ์ฌ์ฉํ๊ณ , ์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
// User ์์ฑ (POST ์์ฒญ)
POST /users
Content-Type: application/json
{
"name": "John Doe",
"email": "john.doe@example.com"
}
// ์๋ต
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com"
}
// User ์กฐํ (GET ์์ฒญ)
GET /users/1
// ์๋ต
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com"
}
gRPC(google remote procedure cell)
- google ์ฌ์์ ๊ฐ๋ฐํ ์คํ์์ค RPC ํ๋ ์์ํฌ
- HTTP/2๋ฅผ ์ฌ์ฉํ๊ณ , ํ๋กํ ์ฝ ๋ฒํผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค๋ ์ ์ ์ฐจ์ด
- ํ๋กํ ์ฝ ๋ฒํผ๋ ์ด์ง ๋ฐ์ดํฐ ํฌ๋งท์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํฉ๋๋ค. ์ด๋ ๋ ์์ ๋ฉ์์ง ํฌ๊ธฐ์ ๋ ๋์ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
- HTTP/1.1์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ฒ์ ์ด๋ฉฐ, HTTP/2๋ ์ฑ๋ฅ ํฅ์์ ์ ๊ณตํ๊ณ , HTTP/3์ ์๋ก์ด ์ ์ก ํ๋กํ ์ฝ QUIC๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋์ ์ฑ๋ฅ๊ณผ ๋ณด์์ ์ ๊ณตํฉ๋๋ค.
- Restful API๋ ๋ฆฌ์์ค ์ค์ฌ, gRPC๋ ์๋น์ค ์ค์ฌ์ API ๋์์ธ์ ์ฑํ
- ๋ฆฌ์์ค๋ ๋ฐ์ดํฐ์ ๊ฐ์ฒด ๋๋ ์๋น์ค์์ ์กฐ์ํ ์ ์๋ ํญ๋ชฉ์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์, ์ํ, ์ฃผ๋ฌธ ๋ฑ์ด ๋ฆฌ์์ค๊ฐ ๋ ์ ์์ต๋๋ค.
- ์๋น์ค์ ๋ฉ์๋ ํธ์ถ์ ์ค์ฌ์ผ๋ก ํ๋ฉฐ, ๊ฐ ๋ฉ์๋๋ ํน์ ์์ ์ ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
syntax = "proto3";
service UserService {
rpc CreateUser(CreateUserRequest) returns (User);
rpc GetUser(GetUserRequest) returns (User);
}
message CreateUserRequest {
string name = 1;
string email = 2;
}
message GetUserRequest {
int32 id = 1;
}
message User {
int32 id = 1;
string name = 2;
string email = 3;
}
Web Server์ WAS์ ์ฐจ์ด
- ์น ์๋ฒ(์ํ์น, niginx, iis)๋ ์ ์ ์น ํ์ด์ง, ์ด๋ฏธ์ง, css ๋ฑ ์ฝํ ์ธ ์ฒ๋ฆฌ
- WAS ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ๋์ ์ฝํ ์ธ ์ฒ๋ฆฌ ์์ฑ ๋ฐ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค, ๋น์ง๋์ค ๋ก์ง ์คํ ๋ฑ ๋ด๋น
XML๊ณผ JSON์ ์ฐจ์ด ๋ฐ ์ฅ๋จ์
- ๋ ๋ค ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ์ ์กํ๊ธฐ ์ํ ํฌ๋ฉง
XML(eXtensible Markup Language)
์ ํ๊ทธ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ์ฉ์ ์ ์ ํ๊ทธ๋ก ๋ฐ์ดํฐ๋ฅผ ํํ, ํ์ฑ์ด ๋ณต์กํ๊ณ ๋๋ฆฝ๋๋ค. ํ์ง๋ง ์ฌ์ฉ์ ์ ์ ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ํ์ฅ์ฑ์ด ์ข๊ณ ๋ง์ ์์คํ ๊ณผ ์ธ์ด์์ ์ง์๋ฉ๋๋ค.JSON(JavaScript Object Notation)
์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ฑฐ๋ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ๋ฒผ์ด ๋ฐ์ดํฐ ํฌ๋งท์ผ๋ก ํ์ฑ์ด ๋น ๋ฅด๊ณ ํจ์จ์ ์ ๋๋ค.
XML์์ node, element, attribute์ ์ฐจ์ด ๋ฐ ์ฉ๋
- ์ ์ฒด ๋ฌธ์๋ ํ๋์ node์ด๊ณ element๋ ๋ ธ๋ ์ค ํ๋๋ก ๊ฐ ํ๊ทธ๋ฅผ ๋ํ๋ ๋๋ค.
- attribute๋ ํ๊ทธ์ ์์ฑ ๋ ธ๋๋ก ์๋ฆฌ๋จผํธ ๋ด์ ์ถ๊ฐ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ์์ ํ๊ทธ ๋ด ์ด๋ฆ๊ณผ ๊ฐ ์์ผ๋ก ํ์
<!-- This entire document is a Node -->
<bookstore> <!-- 'bookstore' is an Element Node -->
<book category="fiction"> <!-- 'book' is an Element Node, 'category' is an Attribute Node -->
<title lang="en">The Great Gatsby</title> <!-- 'title' is an Element Node, 'lang' is an Attribute Node -->
<author>F. Scott Fitzgerald</author> <!-- 'author' is an Element Node -->
<year>1925</year> <!-- 'year' is an Element Node -->
<price>10.99</price> <!-- 'price' is an Element Node -->
</book>
</bookstore>
JSON์์ {}์ []์ ์ฉ๋
- ์ค๊ดํธ๋ JSON ๊ฐ์ฒด๋ฅผ ๋๊ดํธ๋ JSON ๋ฐฐ์ด์ ์๋ฏธํฉ๋๋ค.
- ์ค๊ดํธ๋ ํค-๊ฐ ์์ ์ปฌ๋ ์ ์ผ๋ก ๊ตฌ์ฑ
Algorithm & Data Structure
Stack, Queue, List, Tree, Hash Table
Stack
์ด๋ LIFO ์ ํ๋ฐ์ดํฐ ๊ตฌ์กฐ, push ์ถ๊ฐ, pop ์ ๊ฑฐ, ํ์ํ๊ธฐ๋ฒ ๊ณ์ฐ์ ์ฌ์ฉQueue
๋ FIFO ์ ํ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก enqueue ์ถ๊ฐ, dequeue ์ ๊ฑฐ, ์ค์ผ์ค๋ง, ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ฌ์ฉList
๋ ์์๋ฅผ ์ ์งํ๋ ๋์์ ํญ๋ชฉ์ ๋น ๋ฅธ ์ถ๊ฐ์ ์ ๊ฑฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ- ๋ฐฐ์ด ๋๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํ
Tree
๋ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋น์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ๋ ธ๋์ ์ฃ์ง๋ก ๊ตฌ์ฑ- ์ด์ง ๊ฒ์ ํธ๋ฆฌ, AVL ํธ๋ฆฌ, B-ํธ๋ฆฌ ๋ฑ
Hash Table
์ ํค๋ฅผ ๊ฐ์ ๋งคํํ๋ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก, ๋น ๋ฅธ ๊ฒ์, ์ฝ์ , ์ญ์ ๋ฅผ ์ง์- ํด์ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํค๋ฅผ ํด์ ๊ฐ์ผ๋ก ๋ณํํ๊ณ ์ด ํด์ ๊ฐ์ด ์ ์ฅ๋๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ์ฌ์ฉ
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํน์ ์์๋ก ์ฌ๋ฐฐ์ดํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋ฒ๋ธ์ ๋ ฌ, ์ ํ์ ๋ ฌ, ์ฝ์
์ ๋ ฌ, ๋ณํฉ์ ๋ ฌ, ํต์ ๋ ฌ
๋ฒ๋ธ์ ๋ ฌ
์ ์ธ์ ํญ๋ชฉ์ ๋น๊ตํด ๊ตํ ์ ๋ ฌํ๋ ๊ฒ์ ํ์ ๋ ฌ
์ ๋ฐฐ์ด์ ๊ฐ ์์น์ ๋ํด ๋๋จธ์ง ๋ฐฐ์ด์์ ์ต์๊ฐ์ ์ฐพ์ ํด๋น ์์น์ ๋๋ ์๊ณ ๋ฆฌ์ฆ์ฝ์ ์ ๋ ฌ
์ ๊ฐ ์์๋ฅผ ์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฐฐ์ด์ ์ฌ๋ฐ๋ฅธ ์์น์ ์ฝ์ ํ์ฌ ์ ๋ ฌํฉ๋๋ค.๋ณํฉ์ ๋ ฌ
์ ๋ฐฐ์ด์ ๋ ๊ฐ์ ๊ท ๋ฑํ ํฌ๊ธฐ์ ๋ถ๋ถ ๋ฐฐ์ด๋ก ๋ถํ ํ๊ณ , ๊ฐ ๋ถ๋ถ ๋ฐฐ์ด์ ์ฌ๊ท์ ์ผ๋ก ์ ๋ ฌํ ๋ค์ ๋ณํฉํฉ๋๋ค.ํต์ ๋ ฌ
์ ํผ๋ฒ์ ์ ํํ๊ณ ํผ๋ฒ๋ณด๋ค ์์ ์์๋ค์ ์ผ์ชฝ์, ํฐ ์์๋ค์ ์ค๋ฅธ์ชฝ์ ์์น์ํจ ํ, ๊ฐ ๋ถ๋ถ ๋ฐฐ์ด์ ๋ํด ์ฌ๊ท์ ์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
Database
๊ฐ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ณ ์ข ๋ฅ
- MSSQL
- Window ์ํ๊ณ์์ ์ข์๋ฐ ํน์ ์ด์ ์ฒด์ ์ข ์๋ ์ ์๋ค๋ ๋จ์
- MariaDB
- MySQL ์คํ์์ค ํฌํฌ๋ก ์ผ๋ถ ์คํ ๋ฆฌ์ง์์ง Aria, TokuDB์ ๊ฐ์ ์คํ ๋ฆฌ์ง ์์ง ์ถ๊ฐ
- ๋น ๋ฅธ ์ฟผ๋ฆฌ ์ง์
- ๋ณด์ ๊ฐํ
- NoSQL ์ง์
- MySQL
- InnoDB ๋ก์ฐ๋ ๋ฒจ ๋ฝ์ผ๋ก ํธ๋์ญ์ ๋์์ฑ ํฅ์๊ณผ ๋ฐ๋๋ฝ ์ด์๋ฅผ ์ค์ฌ์ค
- ๋ฐ์ดํฐ ์์ถ์ ์ง์ํ์ฌ ๋์คํฌ ๊ณต๊ฐ์ ์ค์ด๊ณ I/O ์ฑ๋ฅํฅ์
- Redis
- Remote Dictionary Server
- SSD, HDD๊ฐ ์๋ RAM์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทํ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค๊ณ ์ค๋ณต์ ๋ง๊ธฐ ์ํ ํ๋ก์ธ์ค
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ํจ์จ์ฑ, ๋ณต์ก์ฑ์ ์ค์ด๋๋ฐ ์ฌ์ฉ
- 1์ ๊ทํ: ๋ฐ์ดํฐ ์์๊ฐ
- 2์ ๊ทํ: ๋ถ๋ถ ํจ์ ์ข ์์ฑ์ด ์ ๊ฑฐ
- 3์ ๊ทํ: ์ดํ ํจ์ ์ข ์์ฑ์ด ์ ๊ฑฐ
- ๋ณด์ด์ค-์ฝ๋ ์ ๊ทํ(BNCF): ๋ชจ๋ ๋น ๊ธฐ๋ณธํค ์์ฑ์ด ๊ธฐ๋ณธ ํค์ ๋ํด ์ดํ์ ์ข ์
- 4์ ๊ทํ: ๋ค์น ์ข ์์ฑ ์ ๊ฑฐ
- 5์ ๊ทํ: ์กฐ์ธ ์ข ์์ฑ ์ ๊ฑฐ
Outer join์ด๋?
- ๋ ํ ์ด๋ธ ๊ฒฐํฉ์์ ์ผ์นํ๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ(null)์๋ ๋ ์ฝ๋๋ฅผ ๋ฐํ
- left outer join, right outer join, full outer join
View๋?
- DBMS์์ ํ๋ ์ด์์ ํ ์ด๋ธ์์ ํ์๋ ๊ฐ์ ํ ์ด๋ธ์ ์๋ฏธ
- ๊ธฐ๋ณธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ์ง๋ง ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์์ต๋๋ค.
CREATE VIEW EmployeeView AS
SELECT EmployeeName, EmployeeDepartment
FROM EmployeeTable;
Index๋?
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํ ์ฑ ์ ์์ธ๊ณผ ๊ฐ์ ์กด์ฌ
- ์๋ชป ์ค์ ์ ์คํ๋ ค ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ด ์ค์
- ๋น๋ฒํ ์กฐํ๊ฐ ๋ฐ์ํ๋ ์ด
- ๊ณ ์ ๊ฐ์ด ๋ง์ ์ด
- ์ธ๋ฑ์ค ํฌ๊ธฐ ์ต์ํ
- ๋ณตํฉ ์ธ๋ฑ์ค
- page lock ๊ฑธ๋ฆผ, ์ฑ๋ฅ ์ ํ๋ ์๋ ์์
Stored procedure๋?
- ์ ์ฅ ํ๋ก์์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์คํํ ์ ์๋ ์ ์ฅ๋ ์ฝ๋ ๋ธ๋ก
- ์บ์ ์ ์ฅ ํ ์คํํ๋ฏ๋ก ์ฑ๋ฅ์ ๋์ผ ์ ์๊ณ , ํน์ ๊ถํ์ ๋ถ์ฌํด์ ๋ณด์๊ด๋ฆฌ์๋ ์ข์ต๋๋ค.
Transaction์ด๋?
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ผ๋ จ์ ์ฐ์ฐ๋ค์ ํ๋์ ๋ ผ๋ฆฌ์ ์์ ๋จ์๋ก ๋ฌถ์ ๊ฒ
ACID
์์ฑ ๋ง์กฑ- ์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์๊ตฌ์ฑ
read uncommitted
์์๋ ๊ณ ๋ฆฝ์ฑ ์ฑ๋ฆฝ ์ ๋จ.dirty read
,non-repeatable read
,phantom read
๋ฐ์ ๊ฐ๋ฅ์ฑ
Spring
Spring์ ์ฌ์ฉํ๋ ์ด์
- ์์กด์ฑ์ด ํธ๋ฆฌํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐํ ์ฐธ๊ณ ์๋ฃ๊ฐ ๋ง์ผ๋ฉฐ, ์๋ฐ์ ๋ํ์ ์ธ ํ๋ ์์ํฌ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์
- DI, Bean, IoC
- Bean์ Spring ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
- DI๋ Bean์ ์ด์ฉํด์ ์์กด์ฑ ์ฃผ์ ์ ์ฌ์ฉํ๋๋ฐ ์ด๋ก ์ธํด ์์กด์ฑ์ ์ค์ผ ์ ์์ต๋๋ค.
- ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์์กด์ฑ์ด ์ค์ด๋ญ๋๋ค.
- IoC๋ ์ ์ด์ ์ญ์ ์ผ๋ก ๊ฐ์ฒด ์์ฑ ๋ฐ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์๋ ํ๋ ์์ํฌ ๋๋ ์ปจํ ์ด๋์ ์์ํ๋ ๊ฐ๋
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ์ฐจ์ด
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ด ์์จ์ ์ธ ๊ถํ์ด ๋ ๋ง์ผ๋ฉฐ ํ์ํ ๋ถ๋ถ์ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ธฐ์ ์ฉ์ดํ๋ค. ๊ฑด์ค์ฉ ์ฑ ์ํ๋ ์์ํฌ๋ ์ฃผ์ด์ง ๊ถํ์ ๋ง์ถฐ ์ ํ์ ์ด์ง๋ง ์ฌ์ฉํ๊ธฐ์ ํธ๋ฆฌํ ํด์ ์ ๊ณตํ๋ค. ์ง์ ์ง๋ ๋ผ๋- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํน์ ์์ ์ ํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ ํ ํ๋ฆฟ์ ์ ๊ณต, ํน์ ๊ท์น์ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ์ฌ ๊ตฌ์ถ
AOP, DI, Interceptor, Filter
- AOP๋ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ํตํด ํน์ ์ฝ๋๋ฅผ ์ฌ๋ฌ ์์น์์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- @Aspect
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ํ์ํ ๊ด์ฌ์ฌ๋ก ๋ก๊น , ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ณด์, ์์ธ์ฒ๋ฆฌ
- ๋ฐํ์์์ ํ๋ก์๋ฅผ ์ฌ์ฉํด์ ์ ์ฉ
- Aspect ๊ด์
- Join Point ์กฐ์ธ ํฌ์ธํธ
- Advice ์ด๋๋ฐ์ด์ค - ์กฐ์ธํฌ์ธํธ์์ ์คํ๋ ์ค์ ์ฝ๋
- Pointcut ์ด๋๋ฐ์ด์ค๊ฐ ์คํ๋ ์กฐ์ธ ํฌ์ธํธ๋ฅผ ์ง์ ํ๋ ํํ์ ๋๋ ํจํด
- ์ฌ๋ฌ ์กฐ์ธ ํฌ์ธํธ ์ค์์ ์ค์ ๋ก ์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋ ์ง์ ๋ค์ ํํฐ๋งํ๋ ์ญํ
- Interceptor๋ ์คํ๋ง MVC์ ์น ์์ฒญ ์ฒ๋ฆฌ ์ค ํน์ ๋จ๊ณ ์์
์ ์ํํ๊ธฐ ์ํด ์ค๊ณ
- HandlerInterceptor
- ์ฆ ์น ์์ฒญ์๋ง ๊ตญํ๋๋ค๋๊ฒ AOP ์์ ์ฐจ์ด
- ํน์ ๋ ์ด์ด์ ๊ตญํ๋ ์์
- ๋ก๊ทธ์ธ ๊ฒ์ฌ, ๋ก๊น , ๊ถํ ๊ฒ์ฌ
- DI ์์กด์ฑ ์ฃผ์
- ๊ฐ์ฒด๊ฐ ์์กด์ฑ์ ์ธ๋ถ์์ ์ฃผ์
- ๊ฐ์ฒด ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ์คํ๋ง ์ปจํ ์ด๋์ ์์
- @Autowired, @Inject
- Filter ์๋ธ๋ฆฟ ์ปจํ
์ด๋ ์์ค์์ ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๋ก์ฑ์ ์ฒ๋ฆฌ
- ์๋ฐ ์๋ธ๋ฆฟ์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก DispatcherServlet์ ์ํด ์ปจํธ๋กค๋ฌ์ ๋งคํ๋๋๋ฐ Filter๋ ๊ทธ ์ ํ ๋์
- FilterChain์ ์ํด ์ฐ์์ ์ผ๋ก ๋์
- ํ ํฐ ์ธ์ฆ ๋ฑ ํ์ธ์ ์ํด ์ฌ์ฉ
- init(), doFilter(), destory()
- Filter - Intercepter - AOP - Intercepter - Filter ์์ผ๋ก ์ฒ๋ฆฌ
์คํ๋ง์์์ reqeust ์ฒ๋ฆฌ์์
- DispatcherServlet ์์ฒญ์ ๊ฐ๋ก์ฑ์
- @Controller์์ @RequestMapping์ ๋ฐ๋ฅธ request๋ฅผ ์ฐพ์์ ๋ฉ์๋์ ๋๋ฌ
- Controller - Service - DB - Entity - Service - Controller - DispatcherServlet - ViewResolver - DispatcherServlet
- DispatcherServlet์ ์๋ตํ view์๊ฒ render๋ฅผ ์ง์ํ๊ณ view ์๋ต ๋ก์ง์ ์ฒ๋ฆฌ
PSA portable service abstraction ์ถ์ํ ์๋น์ค
- aop, ioc์ ํจ๊ป spring triagle ์ค ํ๋
- spring cache
- ํ๋์ ์ถ์ํ๋ก ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๋ฌถ์ด๋
- @Transactionalย ยป PlatformTransactionManager
Spring vs Spring boot
- ๋ ๋ค ์๋ฐ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ํ ํ๋ ์์ํฌ์ด์ง๋ง, Boot์์๋ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๊ณ ๊ฐ๋ฐ์๊ฐ ์์กด์ฑ ๊ตฌ์ฑ์ ๊ด๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค.
- Spring Boot๋ ๋ด์ฅ Tomcat, Jetty์ ๊ฐ์ ์๋ฒ๋ฅผ ์ ๊ณตํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ฝ๊ฒ ์คํ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
- Spring Boot Starter๋ก ์์กด์ฑ์ ๊ทธ๋ฃนํํ๊ณ Spring Boot Dependency Management๋ฅผ ํตํด ์์กด์ฑ ๋ฒ์ ์ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ ๋ค DispatcherServlet์ ํฌํจํ๊ณ ์์ต๋๋ค.
Java
์๋ฐ์ ์ค๋ ๋ฉ
- synchronized, java.util.concurrent ๋์์ฑ ์ ์ด๋ฅผ ์ํ ์ ํธ๋ฆฌํฐ์ ํด๋์ค ์ ๊ณต
- Thread ํด๋์ค, Runnable ์ธํฐํ์ด์ค๋ก ๋ฉ์๋ ๊ตฌํ
Hibernate
- ORM, JPA ์ง์
- JPA๋ ์๋ฐ ORM ํ์ค ๋ช ์ธ์ด๊ณ , Hibernate๋ JPA ๋ช ์ธ์ ๊ตฌํ์ฒด ์ค ํ๋
- QueryDSL์ ํ์ ์ธ์ดํ ์ฟผ๋ฆฌ ์์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/your_db</property>
<property name="hibernate.connection.username">your_username</property>
<property name="hibernate.connection.password">your_password</property>
<!-- JDBC connection pool settings -->
<property name="hibernate.c3p0.idle_test_period">3000</property>
// ...
<!-- Mention annotated class -->
<mapping class="com.example.Student"/>
</session-factory>
</hibernate-configuration>
์๋ฐ์ ํ์ด์ฌ ์ฐจ์ด, ์ฅ๋จ์
- Java
- ์๋ฐ๋ ์ปดํ์ผ ์ธ์ด๋ก ์คํ์๊ฐ์ด ๋น ๋ฅด๊ณ ํฐ ๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ, ๋ค์ํ ํ๋ซํผ์์ ์คํ๊ฐ๋ฅ
- ๋ณต์กํด ๋ณด์ด๊ฑฐ๋ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ์ฝ๋ ์ฌ์ฉ์ผ๋ก ์์ฑ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
- Python
- ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ๋ฌธ๋ฒ์ด๊ณ , ๋น ๋ฅธ ๊ฐ๋ฐ ์๋
- ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๊ณ ์น, ๋ฐ์ดํฐ ๋ถ์, ์ธ๊ณต์ง๋ฅ, ๊ณผํ ์ฐ์ฐ ๋ฑ ๋ค์ํ ๋ถ์ผ์ ํ์ฉ๊ฐ๋ฅ
- ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ด๋ฉฐ, ์ปดํ์ผ ์ธ์ด์ ๋นํด ์๋์ ์ผ๋ก ๋๋ฆฐ ์คํ ์๋
- ์ปดํ์ผ ์ธ์ด๋ ์์ค ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ฝ๋๋ก ๋ณํํ๋ ์ปดํ์ผ ๊ณผ์ ์ ๊ฑฐ์น๊ณ , ์ปดํ์ผ๋ฌ์ ์ํด ์ํ๋ฉ๋๋ค.
- ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ ์์ค ์ฝ๋๋ฅผ ๋ผ์ธ๋ณ๋ก ํด์ํ๊ณ ์คํํ๊ณ , ์ฝ๋๋ฅผ ์ง์ ์คํํฉ๋๋ค. ๋ฐํ์์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฝํ๋ฉฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์์ ์์ ํ๋ก๊ทธ๋จ์ด ์ค๋จ๋ฉ๋๋ค.
- ๋์์ฑ ์ฒ๋ฆฌ์ ์ ํ์ , ๋ฉํฐ์ค๋ ๋ฉ๊ณผ ๋ฉํฐ ํ๋ก์ธ์ฑ์ด ์๋์ ์ผ๋ก ๋ ๋ณต์กํ ์ ์์ต๋๋ค.
class, abstract class, interface
- ๋ชจ๋ ๋ค ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ตฌ์ฑ ์์
class
๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ ๋๋ ์ค๊ณ๋. ๋ฐ์ดํฐ(ํ๋)์ ๋ฉ์๋๋ฅผ ํฌํจํจabstract class
๋ ์ถ์ ํด๋์ค๋ก ์์ ํ์ง ์์ ์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํด ํ์ ํด๋์ค์์ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ฒ ํ๋ ํด๋์คinterface
๋ ๋ฉ์๋์ ์๊ทธ๋์ฒ๋ง ์ ์ํ๊ณ ๊ตฌํ์ ์ ๊ณตํ์ง ์๋ ํ๋ก ๋ฉ์๋ ๊ตฌํ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅ(java 8 ์ดํ default, static ๋ฉ์๋ ๊ตฌํ์ ํฌํจ ๊ฐ๋ฅ)- ๋๋ถ๋ถ ์ธ์ด์์ ์ธํฐํ์ด์ค์ ๋ค์ค ๊ตฌํ์ ๊ฐ๋ฅํ๋ ์ถ์ ํด๋์ค๋ ๋จ์ผ ์์๋ง ํ์ฉ
- ์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค๋ ์ธ์คํด์คํ ํ ์ ์์ต๋๋ค.
public, protected, private
public
์ด๋์๋ ์์ ๋กญ๊ฒ ์ ๊ทผ ๊ฐ๋ฅprotected
๊ฐ์ ํจํค์ง ๋ด์ ํด๋์ค ๋๋ ์๋ธ ํด๋์ค์์ ์ ๊ทผํ ์ ์์default
์ ๊ทผ์ ํ์ ๋ณ๋ ์ง์ ์ํ ๊ฒฝ์ฐ์ ํด๋นํ๋ฉฐ, ๊ฐ์ ํจํค์ง ๋ด์ ํด๋์ค๋ง ์ ๊ทผ๊ฐ๋ฅ, ์๋ธ ํด๋์ค์์ ์ ๊ทผ ๋ถ๊ฐprivate
ํด๋น ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
this, super
this
ํ์ฌ ํด๋์ค๋ฅผ ์ฐธ์กฐsuper
๋ถ๋ชจ ํด๋์ค๋ฅผ ์ฐธ์กฐ
static, final
static
- static ๋ณ์๋ ํด๋์ค ๋ก๋์ ํ ๋ฒ๋ง ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น
- static ๋ฉ์๋๋ ํด๋์ค ์ด๋ฆ์ผ๋ก ํธ์ถ๊ฐ๋ฅ
- static ๋ฉค๋ฒ๋ ํด๋์ค ๋ก๋์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ก๋์ ์ด๊ธฐํ
- ํด๋์ค ๋ ๋ฒจ์์ ๋์ํ๋ฏ๋ก ํด๋์ค ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ ๊ทผ์ด ๊ฐ๋ฅ
int field = ExampleClass.staticField;
final
- final ๋ณ์๋ ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ
- final ๋ฉ์๋๋ ํ์ ํด๋์ค ์ค๋ฒ๋ผ์ด๋ฉ ๋ถ๊ฐ๋ฅ
- final ํด๋์ค๋ ์์ ๋ถ๊ฐ
static fianl
- ํ๋์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, ๋ณํ์ง ์๋ ์์๋ก ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์
- ๋ฉ์๋์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ ์๋ ์ ์ ๋ฉ์๋ ์ ์ธ์ ์ฌ์ฉ
final
ํ๋๊ฐ ํด๋์ค์ ๋ชจ๋ ์ธ์คํด์ค์ ๋ํด ๋์ผํ ๊ฐ์ ๊ฐ์ ธ์ผ ํ๋ ๊ฒฝ์ฐstatic final
์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋final
ํ๋๊ฐ ์ธ์คํด์ค๋ณ๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ ธ์ผ ํ๋ ๊ฒฝ์ฐ์๋static final
์ ์ฌ์ฉํ๋ฉด ์ ๋ฉ๋๋ค.- Java best practice
- ๋ณ์ ์ค์ ์
- ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์์ผ ํ๋ฉด
final
, ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํด์ผ ํ๋ ๊ฒฝ์ฐstatic
, ๋ชจ๋ ์ธ์คํด์ค ๊ณต์ ํ๋ฉด์ ๊ฐ ๋ณ๊ฒฝ์ด ์ ๋์ด์ผ ํ๋ฉดstatic final
- ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์์ผ ํ๋ฉด
- ๋ฉ์๋ ์ค์ ์
- ์ค๋ฒ๋ผ์ด๋ฉ ๋ถ๊ฐํ๊ฒ ํ๋ ค๋ฉด
fianl
, ์ธ์คํด์ค ์์ฑํ์ง ์๊ณ ๋ ํธ์ถํด์ผ ํ๋ ๋ฉ์๋์์static
- ์ค๋ฒ๋ผ์ด๋ฉ ๋ถ๊ฐํ๊ฒ ํ๋ ค๋ฉด
- ํด๋์ค ์ค์ ์
- ์์ ๋ถ๊ฐ์
final
- ์์ ๋ถ๊ฐ์
- ๋ณ์ ์ค์ ์
๋ฐ์ดํฐ ํ์ ์ค primitive type, reference type
- primitive type ๊ธฐ๋ณธํ์
byte
,short
,int
,long
,float
,double
,char
,boolean
- reference type ์ฐธ์กฐํ์
- ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํ์ (์ค์ ๋ฐ์ดํฐ X)
- ํด๋์ค, ์ธํฐํ์ด์ค, ์ด๊ฑฐ, ๋ฐฐ์ด ๋ฑ
process์ thread ์ฐจ์ด ๋ฐ ์ฉ๋, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๋ง๋ค ์ ์๋์ง
- ๋ฉํฐํ๋ก์ธ์ค์ ๋ฉํฐ์ค๋ ๋ ์ฐธ์กฐ
- ํ๋ก์ธ์ค๋ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค์ด๋ฉฐ ํ๋ ์ด์์ ์ค๋ ๋๋ฅผ ๊ฐ์ต๋๋ค.
- ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ๋ ๋ฆฝ์ ์ธ ์คํ๊ฒฝ๋ก, ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์์์ ๊ณต์
Thread
ํด๋์ค๋ฅผ ํ์ฅํ๊ฑฐ๋Runnable
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ค๋ ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ง๋ ฌํ๋?
- ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๋ ํ๋ก์ธ์ค
- ๋ฐ์ดํฐ ์์์ฑ์ ์ ์งํ๋ฉฐ ๋ค์ ๊ฐ์ฒด ์ํ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
Serializable
import java.io.*;
class Person implements Serializable {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class SerializationExample {
public static void main(String[] args) {
Person p1 = new Person("John Doe", 25);
// ์ง๋ ฌํ
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
out.writeObject(p1);
} catch (IOException e) {
e.printStackTrace();
}
// ์ญ์ง๋ ฌํ
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person p2 = (Person) in.readObject();
System.out.println(p2.name + ", " + p2.age); // ์ถ๋ ฅ: John Doe, 25
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
@Override
- ์๋ฐ์์์ ์ค๋ฒ๋ผ์ด๋ฉ ๋ช ์๋ก ์ปดํ์ผ ์์ ์์ ์ค๋ฅ๋ฅผ ์ก์ ์ ์๊ฒ ํฉ๋๋ค.
- ์ค๋ฒ๋ผ์ด๋ฉ(Overriding)์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ผ๋ก, ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์์ ์ ํด๋์ค ๋ด์์ ์ฌ์ ์ํ ์ ์๊ฒ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ๋์ ๋ฐ์ธ๋ฉ ์ง์
๋ฐฐ์ด๊ณผ ArrayList์ ์ฐจ์ด
- ๋ฐฐ์ด์ ์ ์ธ์ ํฌ๊ธฐ๊ณ ์ , ๊ธฐ๋ณธ ๋ฐ์ดํฐ์ ๊ฐ์ฒด ๋ชจ๋ ์ ์ฅ ๊ฐ๋ฅ, ์ธ๋ฑ์ค ์ ๊ทผ์ด ๋น ๋ฅด๋ ํ์ฅ์ฑ์ด ๋จ์ด์ง๋๋ค.
- ArrayList๋ ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํ๋ฉฐ, ๊ฐ์ฒด ํ์ ์ผ๋ก ์ ์ฅํฉ๋๋ค. ๋ค์ํ ๋ฉ์๋๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต
try, catch, finally์ ๊ฐ๋ ๋ฐ ์ฉ๋
- ์์ธ ๋ฐ์ํ ์ ์๋ ์ฝ๋๋ฅผ
try
์ฒ๋ฆฌํ๊ณ ,catch
๋ก ์์ธ ์ฒ๋ฆฌ๋ฅผ ์งํํ๊ณ ,finally
๋กtry
,catch
์คํ ํ ํญ์ ์ฒ๋ฆฌํ ์์ ์ ์ํํฉ๋๋ค.