κ°μ²΄ μ§ν₯μ μμΉμ λ°λ₯΄λ©΄, μμ보λ€λ 쑰립μ μ¬μ©νλ κ²μ΄ μ’λ€κ³ ν©λλ€. κ·Έ μ΄μ μΈ μμμ ν΅ν μ¬μ¬μ©μ λ¨μ λ€μ λν΄μ μμλ³΄κ³ , 쑰립과 μμμ μμλ€μ μ΄ν΄λ³΄κ² μ΅λλ€. μ€λλ νμ΄ν μ λλ€ πΏ
κ°μ²΄ 쑰립, κ°μ²΄ ꡬμ±μ κ°μ μ©μ΄ !
object composition μ λν λ²μμ μ°¨μ΄λ‘, κ°μ²΄ 쑰립, κ°μ²΄ κ΅¬μ± λ±μ μ©μ΄λ‘ λΆλ¦½λλ€.
κ°μ²΄ μ§ν₯μμ κ°μ²΄ 쑰립μ λ³΄ν΅ νλμμ λ€λ₯Έ κ°μ²΄λ₯Ό μ°Έμ‘°νλ λ°©μμΌλ‘ ꡬνλ©λλ€.
ν κ°μ²΄κ° λ€λ₯Έ κ°μ²΄λ₯Ό 쑰립ν΄μ νλλ‘ κ°λλ€λ κ²μ λ€λ₯Έ κ°μ²΄μ κΈ°λ₯μ μ¬μ©νλ€λ μλ―Έλ₯Ό κ°μ§λλ€.
public class FlowController {
public void process() {
ByteSource source = ByteSourceFactory.getInstance().create();
byte[] data = source.read();
Encryptor encryptor = new Encryptor();
byte[] encryptedData = encryptor.encrypt(data);
FileDataWriter writer = new FileDataWriter();
writer.write(encryptedData);
}
}
쑰립μ μ΄μ©νλ ν¨ν΄μΌλ‘ μμ ν¨ν΄μ΄ μμ΅λλ€.
μ μ ν μμλ₯Ό μ€λΉμ€ ~,~
μ΄ κΈμμ μ μ μλ―, 쑰립 ꡬ쑰λ μμμ λ¨μ λ€μ ν΄κ²°νλ©΄μ λμμ κ° κΈ°λ₯μ μ 곡 λ°κΈ° μν΄ λ±μ₯ν ꡬ쑰μ λλ€. μ¦ κ·Έ κΈ°λ₯μ μ¬μ©κ³Ό νμ₯μ μ ννλ―λ‘μ, μμμ λ¨μ μΈ μ μ°νμ§ μμ μ μ§λ³΄μ λ¬Έμ λ₯Ό ν΄κ²°νκ³ μλ€λ κ²μ λλ€.
μ΄λ₯Ό ν λλ‘ μ‘°λ¦½μ λ€μ ν΄μνμλ©΄, 쑰립μ΄λ μ¬μ¬μ©μ κ΄μ , μ μ§λ³΄μμ κ΄μ μμ μ μ©ν κ΅¬μ‘°μΈ κ²μ λλ€.
Contextλ μ¬λ¬ μ»΄ν¬λνΈ(Activity, Service, Application)μ μμ ν΄λμ€μ λλ€. λν μ¬λ¬ μ»΄ν¬λνΈλ μ΄ Contextλ₯Ό ν΅ν΄ μ°κ²°λμ΄μμ΅λλ€.
μλ μ½λλ 쑰립 ꡬ쑰λ₯Ό μ¬μ©νμ¬ Contextμ κΈ°λ₯μ μ¬μ©νκ³ μλ ContextWrapper ν΄λμ€μ μ½λμ λλ€. μ½λλ₯Ό μ΄ν΄λ³΄κ³ , μ΄λ κ² μ‘°λ¦½κ΅¬μ‘°λ₯Ό μ¬μ©ν μ΄μ μ λν΄μ μκ°ν΄λ³΄κ² μ΅λλ€.
public class ContextWrapper extends Context {
@UnsupportedAppUsage
Context mBase;
public ContextWrapper(Context base) {
mBase = base;
}
/**
* Set the base context for this ContextWrapper. All calls will then be
* delegated to the base context. Throws
* IllegalStateException if a base context has already been set.
*
* @param base The new base context for this wrapper.
*/
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
}
mBase = base;
}
/**
* @return the base context as set by the constructor or setBaseContext
*/
public Context getBaseContext() {
return mBase;
}
@Override
public AssetManager getAssets() {
return mBase.getAssets();
}
@Override
public Resources getResources() {
return mBase.getResources();
}
@Override
public Context getApplicationContext() {
return mBase.getApplicationContext();
}
// μ΄ν μλ΅
}
Activity, Service, Applicationλ ContextImplλ₯Ό μ§μ μμνμ¬ μ¬μ©νμ§ μκ³ , κ³΅κ° λ©μλλ₯Ό μ¬μ©νλ 쑰립μ λ°©λ²μ ν΅ν΄ μ¬μ©νκ³ μμ΅λλ€.
μ΄λ° 쑰립 ꡬ쑰μ μ΄μ μ μλμ κ°μ΅λλ€.
μλ λ§ν¬λ₯Ό ν΅ν΄ μ½λ μλ¬Έμ νμΈνμ€ μ μμ΅λλ€.
λ°λ©΄, μμμ λΆλͺ¨λ‘λΆν° λ¬Όλ €λ°μ 무μΈκ°λ₯Ό νμ₯νκ³ μ¬μ μνλλ°μ μμ λ‘μ΅λλ€. 쑰립과λ λ¬λ¦¬ μ£Όμ΄μ§ κΈ°λ₯μ μ€λ²λΌμ΄λ ν μλ μκ³ , μ΄λ₯Ό νμ₯νμ¬ μ¬λ¬ 컀μ€ν ν΄λμ€λ₯Ό λ§λ€κΈ°λ μ’μ΅λλ€. μ΄ κΈμ 1οΈβ£μμ μ΄μΌκΈ°νλ μμμ λ¨μ μμ μμμ νΉμ§μ λ½μλ³Έλ€λ©΄ μλμ κ°μ΅λλ€.
μμ ν΄λμ€ λ³κ²½μ μ΄λ €μλ, μμμ΄ λΆλͺ¨λ₯Ό μ¬μ©ν μ μκΈ°μ λ°μνλ λ¬Έμ μ λλ€.
λΆνμν ν΄λμ€μ νμ₯λ, κ°λ°μκ° νμν κΈ°λ₯μ λ± λ§κ² 컀μ€ν νμ¬, μ¦ λΆλͺ¨λ₯Ό νμ₯νμ¬ μ¬μ©ν μ μκΈ°μ λ°μνλ λ¬Έμ μ λλ€.
μ΄λ₯Ό νλ§λλ‘ μ 리νλ€λ©΄, μμμ΄λ μ¬μ¬μ©μ΄ μλ κΈ°λ₯μ νμ₯μ΄λΌλ κ΄μ μμ μ μ©ν κ΅¬μ‘°μΈ κ²μ λλ€.
ννΈ, μμμ μ¬μ©ν λμ, νμ IS-A κ΄κ³κ° μ±λ¦½ν΄μΌν©λλ€.
IS-A κ΄κ³
λ¨Όμ μν€νΌλμμ μ€λͺ μ μ΄ν΄λ³΄μλ©΄ μ΄μ κ°μ΅λλ€. IS-A λ μΆμν(νμμ΄λ ν΄λμ€μ κ°μ)λ€ μ¬μ΄μ ν¬ν¨ κ΄κ³λ₯Ό μλ―Ένλ©°, ν ν΄λμ€ Aκ° λ€λ₯Έ ν΄λμ€ Bμ μλΈν΄λμ€(νμν΄λμ€)μμ μ΄μΌκΈ°ν©λλ€. λ€λ₯Έ λ§λ‘, νμ Aλ νμ Bμ λͺ μΈ(specification)λ₯Ό μμνλ€λ μ μμ νμ Bμ μλΈνμ μ΄λΌκ³ λ ν μ μμ΅λλ€.
μ‘°κΈ λ μ λΏλ μ€λͺ μ μν΄ λΉμ λ₯Ό 첨μΈνμλ©΄, λΆλͺ¨κ° View, μμμ΄ TextView ꡬ쑰λ₯Ό λ§λ€ λ, μμ κ΄κ³ (IS-A κ΄κ³)κ° μ±λ¦½νλμ§ λ³΄κ³ μΆλ€λ©΄, TextView is Viewκ° μ°ΈμΈμ§λ₯Ό νμΈνλ©΄ λλ€λ λ§μ λλ€. (μκ³ λ‘ μ΄ λͺ μ λ μ°Έμ΄λ―λ‘, IS-A κ΄κ³κ° μ±λ¦½νλ©°, μλμ μ€λͺ ν Viewκ° μμ ꡬ쑰λ₯Ό μ¬μ©ν λ°°κ²½μ΄ λ©λλ€.)
μ Contextμ 쑰립μΌλ‘, Viewλ μμμΌλ‘ ꡬνλμμκΉμ ?
κ° ν΄λμ€κ° μλλ‘μ΄λ κ°λ°μλ€μ μν΄ μ»€μ€ν λμ΄ μ¬μ©λ μ§λ₯Ό μκ°ν΄λ³΄λ©΄ μ΄ν΄κ° μ¬μμ§μ€ κ²λλ€.
νμ¬ λ§μ μλλ‘μ΄λ κ°λ°μλ€μ μνλ νλ©΄μ ꡬμ±νκΈ° μν΄, μ£Όμ΄μ§ κΈ°λ³Έ μμ ―λ§κ³ λ, λ€μν 컀μ€ν ν΄λμ€λ₯Ό λ§λ€μ΄ νμ©νκ³ μμ΅λλ€. λ°λ©΄ Contextλ₯Ό 컀μ€ν νμ¬ μ¬μ©νλ κ²½μ°λ μμ§ λ§μ΄ λ€μ΄λ³΄μ§ λͺ»νλλ°μ. μ΄λ° μ°μμ λ°λΌμ μ μ ν κ΅¬μ‘°κ° μ¬μ©λμλ€κ³ μ΄ν΄ν μ μμ΅λλ€. Viewλ κΈ°λ₯μ νμ₯μ μμ λ‘μμΌν ν΄λμ€μ΄λ―λ‘ μμμ, Contextλ νμ₯μ΄ κ°μ‘°λμ§ μλ ν΄λμ€μ΄λ―λ‘, μμμ λ¨μ λ€μ 보μνκΈ° μν΄ μ‘°λ¦½μ μ¬μ©νλ€κ³ μ΄ν΄ν μ μμ΅λλ€.