λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
IT/κΈ°μˆ λΈ”λ‘œκ·Έ

λͺ¨λ“ˆ(Module), μ»΄ν¬λ„ŒνŠΈ(Component), μ»¨ν…Œμ΄λ„ˆ(Container)

by 🐳 Laboon 2024. 2. 24.

μ»΄ν¬λ„ŒνŠΈμ™€ λͺ¨λ“ˆμ€ μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ μžκ²©μ¦μ—μ„œλ„ λ‚˜μ˜€λŠ” λ‚΄μš©μΈλ° 이 두 μš©μ–΄μ˜ 차이가 λͺ¨ν˜Έν–ˆλ‹€.

 

λͺ¨λ“ˆ (Module) μ΄λž€?

 

λͺ¨λ“ˆμ€ 생각보닀 μ‰½κ²Œ 생각할 수 μžˆλ‹€.

μš°λ¦¬κ°€ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ λ•Œ, ν•˜λ‚˜μ˜ κΈ°λŠ₯을 λ§Œλ“€κ±°λ‚˜ ν•˜λ‚˜μ˜ 클래슀λ₯Ό λ§Œλ“€κ²Œ λœλ‹€. 이것을 λͺ¨λ“ˆμ΄λΌκ³  ν•œλ‹€.
생각보닀 λ„ˆλ¬΄ κ°„λ‹¨ν•˜κ²Œ μž‘μ„±ν–ˆλŠ”λ° 이것을 μ‹€μ œ 예둜 듀어보겠닀.

 

계산기λ₯Ό μž‘μ„±ν•΄λ³΄μž. μš°λ¦¬λŠ” λ”ν•˜κΈ° 연산을 μž‘μ„±ν•œλ‹€.

int sum(a, b) {
	return a + b;
}

이제 이것은 ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ΄λ‹€.  κ·Έ μ™Έ -, *, / 연산도 λͺ¨λ“ˆμ΄λΌκ³  ν•  수 μžˆλ‹€.

 

그럼 μš°λ¦¬λŠ” μ˜λ¬Έμ„ κ°€μ§ˆ 수 μžˆλ‹€. λͺ¨λ“ˆμ€ ν•¨μˆ˜ λ˜λŠ” λ©”μ†Œλ“œμΈκ°€μš”? 정닡은 μ•„λ‹ˆμ˜€λ‹€.

public class Calculator {
	public int plus();
    public int minus();
    public int divide();
    public int multiple();
}

이런 λ‹€μˆ˜μ˜ κΈ°λŠ₯을 κ°€μ§€κ³  μžˆλŠ” Calculator class도 λͺ¨λ“ˆμ΄λ‹€.

μ™œλƒν•˜λ©΄ μ‚¬μΉ™μ—°μ‚°μ΄λΌλŠ” ν•˜λ‚˜μ˜ κΈ°λŠ₯을 κ°–κ³  있기 λ•Œλ¬Έμ΄λ‹€.

boolean check(int num) {
	if (num > 10) {
    	return false;
    }
    return true;
}

int sum(a, b) {
	int c = a + b;
    if (check(c)) {
    	return c;
    }
    return 10;
}

μ΄λ ‡κ²Œ λ˜μ–΄ μžˆμ„ λ•Œ, checkλŠ” λͺ¨λ“ˆμ΄ λ˜μ§€ μ•ŠλŠ”λ‹€. μ™œλƒν•˜λ©΄ sum의 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ 과정이기 λ•Œλ¬Έμ΄λ‹€.

 

import mymodule.*;

int main() {
	// mymodule의 각 κΈ°λŠ₯λ“€
    sout(mymodule.Caculator.sum(3, 4));
    sout(mymoudle.Member.login(id, password));
}

μ—¬λŸ¬ λͺ¨λ“ˆμ„ λ‹΄κ³  μžˆλŠ” 집합체 λ˜ν•œ λͺ¨λ“ˆμ΄λ‹€.

예λ₯Ό λ“€μ–΄ λ‘œκ·ΈμΈν•˜μ—¬ νšŒμ›λ§Œ 계산기λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž¨μ΄λΌλ©΄ μ˜¬λ°”λ₯Έ κΈ°λŠ₯인 것이닀.

 

μ΄λ ‡κ²Œ λͺ¨λ“ˆμ€ ν”„λ‘œκ·Έλž¨ μˆ˜μ€€μ— λ”°λΌμ„œ μ‚¬μš©ν•  수 μžˆλŠ” 각 κΈ°λŠ₯듀을 μ˜λ―Έν•œλ‹€.

μ—¬κΈ°μ„œ ν”„λ‘œκ·Έλž¨ μˆ˜μ€€μ„ λ”°λ₯Έ κΈ°λŠ₯의 μ˜λ―Έκ°€ λ…λ¦½μ μ΄λΌλŠ” μ˜λ―Έμ΄λ‹€.

 

이런 λͺ¨λ“ˆμ„ μž‘μ„±ν•  λ•ŒλŠ” μ–΄λ–»κ²Œ ꡬ성할 μ§€λ₯Ό μƒκ°ν•˜κ³  '섀계'ν•œλ‹€.

κ·Έλž˜μ„œ λͺ¨λ“ˆμ€ μ„€κ³„μ‹œμ μ—μ„œ μ˜λ―ΈμžˆλŠ” μš”μ†ŒλΌκ³  ν•œλ‹€.

λ‹€λ§Œ μ£Όμ˜ν•΄μ•Ό ν•  점은 μ˜ˆμ‹œλ₯Ό κΈ°λŠ₯으둜 μž‘μ„±ν–ˆλ‹€κ³  'λͺ¨λ“ˆ = κΈ°λŠ₯'으둜 μƒκ°ν•˜λ©΄ μ•ˆλœλ‹€.

μ˜ˆμ‹œμ—μ„œ μ„€λͺ…ν–ˆλ“― λͺ¨λ“ˆμ€ λͺ¨λ“ˆλ‘œ ꡬ성이 될 수 μžˆλ‹€. μ—¬κΈ°μ„œ λͺ¨λ“ˆ 내에 μžˆλŠ” μ½”λ“œλ“€μ„ ν¬κ΄„ν•΄μ„œ λͺ¨λ“ˆμ΄λΌκ³  μΉ­ν•œλ‹€.

ν•˜λ‚˜μ˜ κΈ°λŠ₯에 λŒ€ν•΄μ„œλ§Œ λͺ¨λ“ˆμ΄ μ•„λ‹Œ λ³€μˆ˜, λ©”μ„œλ“œ, ν΄λž˜μŠ€λ“€μ„ ν¬κ΄„ν•΄μ„œ λͺ¨λ“ˆμ΄λΌκ³  ν•œλ‹€.

λ³€μˆ˜μ˜ μ§‘ν•© = λ©”μ„œλ“œ, λ©”μ„œλ“œ μ§‘ν•© = 클래슀, 클래슀 μ§‘ν•© = νŒ¨ν‚€μ§€κ°€ λͺ¨λ‘ λͺ¨λ“ˆμ΄ λœλ‹€.


μ»΄ν¬λ„ŒνŠΈ (Component) λž€?

 

μ»΄ν¬λ„ŒνŠΈμ™€ λͺ¨λ“ˆμ˜ 차이λ₯Ό μ΄ν•΄ν•˜κΈ°κ°€ 정말 μ–΄λ €μ› λ‹€.

μ—¬λŸ¬ κΈ°λŠ₯의 λͺ¨λ“ˆ 섀계λ₯Ό ν–ˆλ‹€λ©΄ μ»΄ν¬λ„ŒνŠΈλŠ” μ €λŸ° λͺ¨λ“ˆμ„ 직접 μ‚¬μš©ν•˜λŠ” 역할이닀.

μ—¬κΈ°μ„œ λ§ν•˜λŠ” '직접 μ‚¬μš©ν•˜λŠ” μ—­ν• 'μ΄λΌλŠ”κ²Œ μ°Έ λͺ¨ν˜Έν–ˆλŠ”λ°, 배포에 λŒ€ν•΄μ„œ μ•Œκ³  μžˆμ–΄μ•Όν•œλ‹€.

 

λ¨Όμ € μ»΄ν¬λ„ŒνŠΈλ₯Ό 쑰금 더 μžμ„Έν•˜κ²Œ μ„€λͺ…ν•΄λ³΄μžλ©΄ 'μ‹€ν–‰ μ‹œμ μ— μ˜λ―ΈμžˆλŠ” μš”μ†Œ'이닀.

ν’€μ–΄μ„œ μ„€λͺ…ν•˜μžλ©΄ λͺ¨λ“ˆ 쀑 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μ΅œμ†Œμ˜ λͺ¨λ“ˆμ„ μ˜λ―Έν•˜λŠ” 것이닀.

 

λ‘œκ·ΈμΈμ„ μƒκ°ν•΄λ³΄μž. λ‘œκ·ΈμΈμ—λŠ” μž…λ ₯κ°’ 검증, μ‚¬μš©μž 검증, μ˜ˆμ™Έμ²˜λ¦¬ λ“±μ˜ μž‘μ—…μ΄ μ΄λ£¨μ–΄μ§ˆ 것이닀.

이 각 각을 λͺ¨λ“ˆμ΄λΌκ³ ν•˜λ©° 이 λͺ¨λ“ˆλ“€μ„ ν¬ν•¨ν•œ 둜그인 λͺ¨λ“ˆμ΄ μ‘΄μž¬ν•  것이닀.

ν΄λΌμ΄μ–ΈνŠΈ μž…μž₯μ—μ„œ λ‘œκ·ΈμΈμ„ ν•  λ•Œ μž…λ ₯κ°’ 검증, μ‚¬μš©μž 검증, μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•˜κ³  λ‘œκ·ΈμΈμ„ ν•˜μ§€ μ•ŠλŠ”λ‹€.

κ·Έμ € 둜그인 κΈ°λŠ₯만 μ‚¬μš©ν•œλ‹€.

 

μ΄λ ‡κ²Œ νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μ΅œμ†Œμ˜ κΈ°λŠ₯을 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‹€ν–‰ν•œλ‹€. 

즉, μ‹€ν–‰ μ‹œμ μ— μ˜λ―ΈμžˆλŠ” μš”μ†Œκ°€ λ˜λŠ” 것이닀. μ΄λ ‡κ²Œ μ΅œμ†Œμ˜ κΈ°λŠ₯(λͺ¨λ“ˆ)을 μˆ˜ν–‰ν•  수 μžˆλŠ” 것이 μ»΄ν¬λ„ŒνŠΈμ΄λ‹€.

μ–΄λŠ μ±…μ΄λ‚˜ λΈ”λ‘œκ·Έλ‚˜ κ°€μ‹œμ„±μ—†μ΄ μ„€λͺ…λ§Œ λ˜μ–΄ μžˆμ–΄μ„œ μ •ν™•ν•˜κΈ° μ΄ν•΄ν•˜κΈ° νž˜λ“€μ—ˆμ„ν…λ° 이 글을 톡해 κ°œλ…μ„ μž‘μ•˜μœΌλ©΄..

 

λ‚΄κ°€ μ°Έκ³ ν•œ λΈ”λ‘œκ·Έμ—μ„œλ„ 곡뢀해보면 쒋은 μ‹œκ°„μ΄ 될 것 κ°™λ‹€.

μ‹€ν–‰ μ‹œμ μ˜ λ‹€λ₯Έ 해석

 

μ„ μˆ˜ κ°œλ…μœΌλ‘œ OS κ°œλ…μ΄ ν•„μš”ν•˜λ‹€. ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κ²Œ 되면 ν”„λ‘œμ„ΈμŠ€ μƒνƒœκ°€ λœλ‹€.

이 ν”„λ‘œμ„ΈμŠ€λŠ” 기본적으둜 ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ₯Ό κ°€μ§€κ³  μžˆλ‹€.

μŠ€λ ˆλ“œλŠ” μ‹€ν–‰ λ‹¨μœ„μ΄λ―€λ‘œ μŠ€λ ˆλ“œ μƒνƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” 것을 μ»΄ν¬λ„ŒνŠΈλΌκ³  ν•  수 μžˆλ‹€.

μ•žμ„œ μ„€λͺ…ν•œ λ‘œκ·ΈμΈμ—μ„œ μ—¬λŸ¬ λͺ¨λ“ˆμ— λŒ€ν•΄ λͺ¨λ‘ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•œλ‹€κ³  μƒκ°ν•΄λ³΄μž.

μž…λ ₯κ°’ κ²€μ¦μ—μ„œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­, μ‚¬μš©μž κ²€μ¦μ—μ„œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­, ...

아무리 μŠ€λ ˆλ“œμ˜ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ κ°€λ³λ‹€κ³ λŠ” ν•˜λ‚˜ ν”„λ‘œκ·Έλž¨μ˜ κΈ°λŠ₯이 맀우 λ–¨μ–΄μ§ˆ 것이닀.

 

μœ„ λΈ”λ‘œκ·Έμ—μ„œ λ§ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ - μ„œλ²„ μ‹œμŠ€ν…œμ—μ„œ 1개의 μ„œλ²„μ™€ 10개의 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‘΄μž¬ν•  λ•Œ,

λͺ¨λ“ˆμ€ 2개이고 μ»΄ν¬λ„ŒνŠΈλŠ” 11개라고 ν•œλ‹€. μ΄μœ κ°€ 뭘까??

 

λ‚΄ 지인은 μ„œλ²„μ˜ λͺ¨λ“ˆ 1κ°œμ™€ ν΄λΌμ΄μ–ΈνŠΈ 각 각의 λͺ¨λ“ˆ 1κ°œμ”©μ΄ ν•„μš”ν•œ 것 μ•„λ‹ˆλƒ? κ·ΈλŸ¬λ‹ˆ 총 10개의 λͺ¨λ“ˆμ΄ μ•„λ‹ˆλƒ?

μœ„μ™€ 같은 μ§ˆλ¬Έμ„ λ˜μ‘ŒλŠ”λ° 처음 μ„€λͺ…ν•œ 배포의 κ°œλ…μ΄ μ—¬κΈ°μ„œ ν•„μš”ν•˜λ‹€.

ν΄λΌμ΄μ–ΈνŠΈ - μ„œλ²„ μ‹œμŠ€ν…œμ˜ μžμ„Έν•œ λ‚΄μš©μ€ μ—¬κΈ°λ₯Ό μ°Έκ³ ν•˜λ©΄ μ’‹κ² λ‹€.

 

ν΄λΌμ΄μ–ΈνŠΈ - μ„œλ²„ μ‹œμŠ€ν…œμ„ λ°°ν¬ν•˜λ©΄ 각 각 ν•˜λ‚˜μ”©μ˜ λͺ¨λ“ˆμ΄ ν•„μš”ν•˜κ²Œλ˜κ³  ν΄λΌμ΄μ–ΈνŠΈλ“€μ€ ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„μ— μ ‘μ†ν•΄μ„œ λ°±μ—”λ“œ μ„œλ²„μ— μš”μ²­ν•˜κ²Œ λœλ‹€.

이 λ•Œ, ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„λŠ” ν•˜λ‚˜μ΄λ―€λ‘œ λ‹€μˆ˜μ˜ μ‚¬μš©μžκ°€ μ ‘μ†ν•˜κ²Œ λœλ‹€λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„μ—μ„œλŠ” 각 각의 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μŠ€λ ˆλ“œλ‘œ κ΄€λ¦¬ν•˜κ²Œ 될 것이닀. 즉, ν΄λΌμ΄μ–ΈνŠΈμ—λŠ” 1개의 λͺ¨λ“ˆμ— 10개의 μ»΄ν¬λ„ŒνŠΈ(μŠ€λ ˆλ“œ)κ°€ μƒκΈ°κ²Œ λœλ‹€.

μ„œλ²„μ—μ„œλŠ” 1개의 λͺ¨λ“ˆμ— 1개의 μ»΄ν¬λ„ŒνŠΈ(μŠ€λ ˆλ“œ)κ°€ μƒκΈ°κ²Œ λœλ‹€. (1ν”„λ‘œμ„ΈμŠ€ = μ΅œμ†Œ 1μŠ€λ ˆλ“œλ₯Ό 가짐)


μ»¨ν…Œμ΄λ„ˆ (Container) λž€?

 

μ»¨ν…Œμ΄λ„ˆλŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μ΄ν•΄ν•˜κ²Œ λ˜μ—ˆμœΌλ©΄ ꡉμž₯히 μ‰¬μš΄ κ°œλ…μ΄λ‹€.

 

μ›Ήμ‚¬μ΄νŠΈμ˜ 경우 ν”„λ‘ νŠΈ μ„œλ²„μ—μ„œ html, css, js λ“±μœΌλ‘œ viewλ₯Ό μ œκ³΅ν•˜κ²Œ λœλ‹€.

그리고 각 각의 κΈ°λŠ₯이 ν•„μš”ν•œ μ›Ή νŽ˜μ΄μ§€λ“€μ„ μƒμ„±ν•΄μ„œ μ μ ˆν•˜κ²Œ κΈ°λŠ₯을 λ°°μΉ˜ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈλ“€μ—κ²Œ UIλ₯Ό μ œκ³΅ν•˜λŠ”λ°

이 λ•Œ, ν•˜λ‚˜μ˜ μ›Ή νŽ˜μ΄μ§€ = ν•˜λ‚˜μ˜ λ°±μ—”λ“œ μ„œλ²„μ˜ κΈ°λŠ₯듀이 μ•„λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ λ°±μ—”λ“œ μ„œλ²„μ˜ κΈ°λŠ₯으둜 λͺ‡ 개의 μ›Ή νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€μ–΄μ„œ 각 각의 κΈ°λŠ₯을 적절히 λ°°μΉ˜ν•˜λŠ” 것이닀.

 

즉, κΈ°λŠ₯듀이 λͺ¨μ—¬μžˆλŠ” 곳이 μ»¨ν…Œμ΄λ„ˆμΈλ° μ—¬κΈ°μ„œ λ§ν•˜λŠ” κΈ°λŠ₯은 μ‹€ν–‰ν•  수 μžˆλŠ” μ΅œμ†Œμ˜ κΈ°λŠ₯이고 μ΄λŠ” 즉, μ»΄ν¬λ„ŒνŠΈλ₯Ό μ˜λ―Έν•œλ‹€.


정리

 

  • λͺ¨λ“ˆ
    • 독립적인 κΈ°λŠ₯λ“€
    • μž¬μ‚¬μš©μ΄ κ°€λŠ₯ (μž‘μ€ κΈ°λŠ₯듀을 μž¬μ‚¬μš©ν•˜μ—¬ 큰 κΈ°λŠ₯을 λ§Œλ“€ 수 있음)
    • μž‘μ€ κΈ°λŠ₯λ“€, μž‘μ€ κΈ°λŠ₯듀이 λͺ¨μ—¬μžˆλŠ” 큰 κΈ°λŠ₯λ“€, 큰 κΈ°λŠ₯듀이 λͺ¨μΈ 집합체, 집합체듀이 λͺ¨μΈ νŒ¨ν‚€μ§€
    • ν”„λ‘œκ·Έλž¨ μ½”λ“œμ˜ 일뢀듀
  • μ»΄ν¬λ„ŒνŠΈ
    • λͺ¨λ“ˆ 쀑 μ‹€ν–‰ν•  λ•Œ ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ λ‹¨μœ„
    • 독립적이어야 함. (λ‘œκ·ΈμΈμ—μ„œ 아이디와 λΉ„λ°€λ²ˆν˜Έλ₯Ό μ°Ύμ•„μ£Όλ©΄μ„œ 둜그인이 λœλ‹€λ©΄ 말이 μ•ˆλ¨.)
    • ν”„λ‘œκ·Έλž¨μ˜ 일뢀듀
    • μž¬μ‚¬μš© κ°€λŠ₯함. (λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ˜ μΌλΆ€λ‘œ μ‚¬μš© κ°€λŠ₯)
  • μ»¨ν…Œμ΄λ„ˆ
    • μ»¨ν…Œμ΄λ„ˆ μˆ˜μ€€μ— λ”°λ₯Έ μ»΄ν¬λ„ŒνŠΈλ“€μ˜ 집합체
    • νŠΉμ •ν•œ κΈ°λŠ₯듀을 μˆ˜ν–‰ν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž¨ μˆ˜μ€€