Definition
โข
S/W ๊ฐ์ฒด(class, module, function ๋ฑ)๋ ํ์ฅ์ ์ด๋ ค์๊ณ , ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ.
โข
์ถ์ํ๋ฅผ ํตํ ๋ณ๊ฒฝ์ ๋ํ ํ๊ธ์ ๊ฒฉ๋ฆฌ, ๋คํ์ฑ์ ์ด์ฉํ ํ์ฅ์ ์ง์
OCP violated sample
Class Client
{
void DoCommunicate(Server1 server1) { //.. }
//...
}
//ํ server(Server2)๋ฅผ ์ฐธ์กฐํด์ผ ํ ๊ฒฝ์ฐ์ ๋ณ๊ฒฝ
Class Client
{
void DoCommunicate(Server2 server2) { //.. }
//...
}
C#
๋ณต์ฌ
โข
Client๋ Concrete class์ธ server๋ฅผ ์ฐธ์กฐ
โข
๋ง์ผ client๊ฐ ํ server ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ์ server ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋๋ก ๋ณ๊ฒฝํด์ผ ํ ๊ฒ์
OCP complied sample
Class Server1 : IClient {}
Class Client
{
void DoCommunicate(IClient server) { //.. }
//...
}
//์ ๊ธฐ๋ฅ์ ๋ด๋นํ Server2. client ๋ณ๊ฒฝ ํ์ ๋ฌด
Class Server2 : IClient {}
C#
๋ณต์ฌ
โข
Client๋ ์ถ์ ํด๋์ค ๋๋ interface๋ฅผ ์ฐธ์กฐ. ์ด ๋ ์ฐธ์กฐํด์ผ ํ ์ server ๊ฐ์ฒด๊ฐ Client Interface๋ฅผ ์์ํ๋ค๋ฉด,
โฆ
client๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์์(๋ณ๊ฒฝ์ ๋ํ ๊ฒฉ๋ฆฌ)
โฆ
์ server ๊ฐ์ฒด๋ฅผ ํตํด client์ ๊ธฐ๋ฅ์ ํ์ฅ(๋คํ์ฑ ๊ธฐ๋ฐ)
Usage examples for OCP
โข
Access modifier : ํนํ private(protected), Property(Getter/Setter)๋ฅผ ํตํ ์ธ๋ถ ๋
ธ์ถ.
โข
IOC(Inversion of Control) : template method, strategy pattern, delegate(C#) ๋ฑ..
Conclusion
โข
๊ฒฝ์ง์ฑ๊ณผ ์ทจ์ฝ์ฑ์ ์ ๊ฑฐํ๋ ๋ํ์ ์์น์ผ๋ก์, ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ํต์ฌ.
โข
OCP๊ฐ ์๊ตฌํ๋ ์ ์ ํ ์ถ์ํ๋ ์ค์ ์ ์ฉ์๋ ๋ง์ ๊ฒฝํ์ ์๊ตฌ(์ ์ฉ์ด ์ฉ์ดํ ์์น์ ์๋) : ์? ์ถ์ํ๋ ์ข
์ข
'๋ถํ์ํ ๋ณต์ก์ฑ'์ ์ ๋ฐํ๊ธฐ ๋๋ฌธ์. ์ ์ ํ trade off ํ์.




