http://KingCrap.com 으로 옮겼습니다.
Home
Guestbook
Join
Admin
자바와 C#에서의 polymorphism
오롯이
|
1/30/2008 2:08:59 PM
virtual과 관련된 몇 가지 현상에 대해 좀 더 살펴보자.
자바의 경우
자바의 경우 인터페이스를 구현하거나 다른 클래스를 상속할 경우 항상 virtual로 간주되기 때문에 virtual이라는 키워드가 존재않는다. 따라서 원하지 않는 virtual 적인 행위를 방지하기 위해 final이라는 키워드를 사용할 수 있다.
클래스의 상속을 막기 위해 final class로 선언할 수 있고
public final class Babo { ... }
상속은 허용하되 일부 메소드의 override를 막기 위해 final 메소드로 선언할 수 있다.
pubilc class Babo
{
public final void tellMe() { ... }
}
참고로 final은 멤버 변수를 상수로 선언하기 위해 사용되기도 하고
public class Babo
{
private final String name = "바보";
}
메소드의 파라메터에 로컬 변수로 선언되기도 한다.
public void tellMe(final String name) { ... }
닷넷의 경우 (C#의 경우)
C#의 경우에는 지난 번에 포스팅했듯이 인터페이스의 구현과 클래스간의 상속을 구분한다. 인터페이스의 구현은 polymorphism 성격을 띄지 않기 때문에 자식이 부모의 메소드를 override 할 수 없다. 또한 상속시의 경우에도 자식이 override 할 수 있는 것과 하지 못하게 할 것을 구분하기 위해 virtual 키워드를 쓴다. virtual 이 아닌 부모의 메소드는 override 할 수 없다.
자바의 경우 처럼, C#에도 override를 방지하는 키워드 sealed가 있다. 즉, sealed 메소드가 있다. 하지만 자바와 조금 다른데, sealed 메소드는 반드시 상속을 받는 자식 클래스가 부모의 virtual 메소드를 override하면서 자신의 자식 클래스, 즉, 손자 클래스가 더 이상 override하지 못하도록 막는 역할을 한다. 반드시 override 하는 상황에서만 사용된다는 특징이 있다. 즉, 항상 sealed는 override와 함께 다닌다.
조금 다른 얘기인데 재밌는 사실은...
interface IMsg
{
void Message();
}
class Parent : IMsg
{
public
virtual
void Message()
{
Console.WriteLine("부모가 불렸네.");
}
}
class Child : Parent
{
public
sealed override
void Message()
{
Console.WriteLine("자식이 불렸네.");
}
C#에서 인터페이스 IMsg에 선언되어 있는 메소드 Message()의 IL 코드를 보면 abstract virtual로 자동 선언된다.
.method public hidebysig
newslot
abstract virtual
instance void Message() cil managed
이 인터페이스의 메소드를 구현하고 있는 Parent 클래스의 Message() 메소드는 IL에서 virtual final로 선언된다.
.method public hidebysig
newslot
virtual final
instance void Message() cil managed
하지만, 이 인터페이스를 구현하면서 해당 메소드에 virtual을 붙이면 Parent 클래스의 Message() 메소드는 IL에서 그냥 virtual로 선언된다.
.method public hidebysig
newslot
virtual
instance void Message() cil managed
인터페이스를 구현한 Parent를 상속받은 Child 클래스의 sealed override Message() 메소드는 IL에서 virtual final로 선언된다. 즉, 더이상의 override는 불가하다.
.method public hidebysig
virtual final
instance void Message() cil managed
정리하면, C#에서도(??) 인터페이스의 구현시에 자동 virtual이 선언되나 final이 있기 때문에 virtual적인 형태를 띄지 않아 override가 되지 않는 것으로 추정되며, 구현 클래스에서 명시적으로 virtual을 붙이게 되면 final이 아닌 virtual로 선언되기 때문에 override가 가능하게 되는 것 같다. 또한 위에서 보듯이 이를 상속받은 자식 클래스에서 sealed 메소드로 선언해버리면 다시 vritual fianl이 되어 더 이상의 override는 불가능하다.
자바는 모든 것을 virtual적인 것으로 간주하여 풀고 final을 써서 필요한 부분을 막고, C#의 경우 모든 것을 일단 막고 virtual 키워드를 써서 필요한 부분을 풀고 ... 이런 것인가 ?
polymorphism
Trackbacks (1)
|
Comments (0)
http://acroama.isblog.net/trackback_post_68.aspx
http://k.shacsinja.com/bn
11/1/2008 8:57:35 PM
Izona Wildcats Basketball
EjghLt0 | Carbonizes
name
password
homepage
comment
secret
이 블로그는 개인블로그이며, 여기에 혹시 있을지 모를 정치적 성향이나 논점은 제가 속한 회사 방침과 무관하며, 전적으로 개인적인 것임을 밝힙니다.
Intro
한국마이크로소프트 개발자 및 플랫폼 전도사업부에서 근무하며, 기업의 개발부서에서 아키텍처를 담당하는 고급개발자 및 CTO 들에게 마이크로소프트 플랫폼의 장점을 널리 전파하는 역할을 하고 있습니다.
Categories
전체 (68)
새소식 (26)
아키텍처 (3)
닷넷과 자바 (19)
Software+Service (7)
OBA (3)
OpenXML (7)
창고 (1)
Notice
Tag Clouds
.NET
.NET Framework 3.5
기술 동향
닷넷 프레임웍
동의어
문서표준
미션 크리티컬 애플리케이션
보안
쓰레드
아키텍처
오픈소스
이매진컵
클래스로더
표준
확장팩
ADO.NET
AOP
Architecture
ASP.NET
ASP.NET 3.5 Extension
Astoria
BizTalk
BizTalk Server
Cheap Revolution
CompositeApplication
Consumer JRE
DevDays
Dynamics CRM 4.0
Enterprise Library
Entity Framework
FastCGI
Framework
GC
IDC 보고서
ImagineCup
ingenuitypoint
Interface
ISO 인증
isv
JavaScript
JBI
JDK 6 Update N
LAMP
LINQ to Entities
LINQ to SQL
Linux
LitwareHR
MCP
MSJVM
MVC
News Reader
NView
One+One
OpenAjax
OpenXML4J
PHP
polymorphism
SBS
SCA
SCE
Second Shot
SOA
Spring.NET
Survival Guide
Synchronization
Tester Center
Volta
VS International Pack
WF
Windows Server 2008
XMLHttpRequest
Zend
공개표준
소스공개
CompsiteApplication
DI
ESB
LINQ
ODF
Software+Services
VisualStudio2008
AJAX
OBA
WCF
.NET Framework
ASP.NET MVC
SilverLight
Software+Service
OpenXML
SaaS
Recent Entries
블로그 이전합니다
자바와 C#에서의 polymorphism
구글과 IBM, Office Open XML을 지원하다...
닷넷 프레임웍 리스트 - Beta
초보 운전 경험기
ADO.NET Entity Framework
[버튼 그룹 리포트] What's Up, .DOC ?
오픈 소스 코드가 프로젝트를 위험에 빠뜨릴 수 있다 ?...
Syndicated Client Experiences ...
드디어 .NET Framework 소스 공개하다.
Recent Comments
<strong><a href="http://www.on...
<strong><a href="http://www.on...
<strong><a href="http://www.on...
전국에 남녀노소 누구나 참여하십시오 당신은 이 사업으로...
서버에 올라가서 이를 보는 사용자의 브라우저 내에서 악...
완전히 동일한 목적을 가지고 동일한 기능을 하는 것이 ...
-일본빠찡꼬식 예시 연타게임 -오픈기념으로 환수율...
땅(단독주택 등)은 있지만 비용부족으로 건축을 미루시는...
땅(단독주택 등)은 있지만 비용부족으로 건축을 미루시는...
-환전율 좋은곳만 엄선하였습니다. -모든싸이트 가...
Recent Trackbacks
chinese food points
equipment food packaging
chart for the basic food group...
gain weight food
food science magazine
Calendar
<
September 2010
>
Su
Mo
Tu
We
Th
Fr
Sa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Archives
200802
200801
200712
200711
200710
200709
200708
200707
200706
200705
200704
Link
누구씨닷컴
김국현의 낭만 IT
Cooolguy
꼬알라의 하얀집
이전 블로그
Info
Total :
141465
Today :
50
Yesterday :
238
Loading...