Internal Access
엑세스 한정자는 메소드와 프로퍼티와 같은 클래스 멤버에 대한 Access 레벨을 정의 한다. 그 중 Internal인 경우 같은 닷넷 Assembly(또는 같은 프로젝트) 에서는 접근이 가능하도록 하는 접근 지시자 이다.
이러한 Internal Access를 이용하는 이유는 좀 더 많은 객체를 추가하기 위한 것인데 잘 설계된 객체지향 시스템은 큰 클래스를 여러 개의 조그만 클래스로 쪼개어 기능을 알아보기 쉽게 설계 하는 것이다. 객체 지향의 비밀은 각 개별적인 객체에 있는 것이 아니라 객체들간의 관계에 있다. 객체들은 클래스 계층구조를 위해 다른 객체들을 상속하여 만들어 지고 있으면 서로 협력하여 커다란 시스템을 구성 한다. 이러한 객체 계층 구조에서 private, public Access인 경우 객체 계층 구조의 연결성이 없어 적합하지 않다. public 인 경우 계층 구조에 있는 객체들에게만 접근을 허용 하고 싶다든지, 또는 private인 경우 접근을 구조에 있는 객체들에게 확대하고 싶다든지 할 것이다. 잘 설계된 객체 지향 프로젝트에서 객체들의 관계는 상속 관계보다 훨씬 더 일반적이다 그래서 주어진 상하계층 구조에서 객체들에 대한 접근을 제한 할 수 있는 기술이 팔요 한 것이다.
public 및 private 한정자는 논리적이다. 즉 클래스의 물리적인 위치와 관계 없다. Public인 경우 물리적으로 클래스가 어디에 있든지 접근이 가능 하며, private인 경우 역시 물리적으,로 어디에 있든지 외부에서는 접근이 불가 하다. 반면에 Internal 접근의 경우 물리적으로… 어떤 Internal로 선언된 클래스가 있다고 할 때 이 클래스를 어떤 어셈블리에 포함 한다면 그 어셈블리 안에서는 접근이 가능하다, 또는 물리적으로 다른 위치에 있는 어떤 실행화일에 포함 시킨다면 그 클래스에 대한 접근은 이 클래스를 포함하고 있는 컴파일 유닛에서만 접근 가능 한 것이다.
-----------------
문법적인 요소
-----------------
클래스가 internal로 정의되어 있다면 현재의 어셈블리에서 접근이 가능하며 protected internal로 선언 되었다면 현재의 어셈블리 또는 그 클래스를 상속받은 파생 클래스에서 접근이 가능 할 것이다.
1. 내포되지 않은 타입
public class Bank1 {}
internal class Bank2 {}
protected class Bank3 {} //오류
private class Bank4 {} //오류
namespace Banking {
public class Bank1 {}
internal class Bank2 {}
protected class Bank3 {} //오류
private class Bank4 {} //오류
}
만약 전역적으로 네임스페이스 내에 타입을 선언하고 아무 한정자를 기술하지 않는 다면 internal로 기본적으로 설정된다.
2. 내포된 타입
class Test {
public class A {}
protected class B {}
protected internal C {} //internal protected로 해도 무방
internal class D {}
private class E {}
}
구조체인 경우 상속 할 수 없기 때문에 구조체 내에 protected나 protected internal을 사용하는 경우에는 오류 발생
public struct s {
protected int a; //오류
protected internal b; //오류
}
소멸자에 접근 한정자를 사용하는 것 역시 오류
class Bank {
internal ~Bank() {} //오류
}
엑세스 한정자는 메소드와 프로퍼티와 같은 클래스 멤버에 대한 Access 레벨을 정의 한다. 그 중 Internal인 경우 같은 닷넷 Assembly(또는 같은 프로젝트) 에서는 접근이 가능하도록 하는 접근 지시자 이다.
이러한 Internal Access를 이용하는 이유는 좀 더 많은 객체를 추가하기 위한 것인데 잘 설계된 객체지향 시스템은 큰 클래스를 여러 개의 조그만 클래스로 쪼개어 기능을 알아보기 쉽게 설계 하는 것이다. 객체 지향의 비밀은 각 개별적인 객체에 있는 것이 아니라 객체들간의 관계에 있다. 객체들은 클래스 계층구조를 위해 다른 객체들을 상속하여 만들어 지고 있으면 서로 협력하여 커다란 시스템을 구성 한다. 이러한 객체 계층 구조에서 private, public Access인 경우 객체 계층 구조의 연결성이 없어 적합하지 않다. public 인 경우 계층 구조에 있는 객체들에게만 접근을 허용 하고 싶다든지, 또는 private인 경우 접근을 구조에 있는 객체들에게 확대하고 싶다든지 할 것이다. 잘 설계된 객체 지향 프로젝트에서 객체들의 관계는 상속 관계보다 훨씬 더 일반적이다 그래서 주어진 상하계층 구조에서 객체들에 대한 접근을 제한 할 수 있는 기술이 팔요 한 것이다.
public 및 private 한정자는 논리적이다. 즉 클래스의 물리적인 위치와 관계 없다. Public인 경우 물리적으로 클래스가 어디에 있든지 접근이 가능 하며, private인 경우 역시 물리적으,로 어디에 있든지 외부에서는 접근이 불가 하다. 반면에 Internal 접근의 경우 물리적으로… 어떤 Internal로 선언된 클래스가 있다고 할 때 이 클래스를 어떤 어셈블리에 포함 한다면 그 어셈블리 안에서는 접근이 가능하다, 또는 물리적으로 다른 위치에 있는 어떤 실행화일에 포함 시킨다면 그 클래스에 대한 접근은 이 클래스를 포함하고 있는 컴파일 유닛에서만 접근 가능 한 것이다.
-----------------
문법적인 요소
-----------------
클래스가 internal로 정의되어 있다면 현재의 어셈블리에서 접근이 가능하며 protected internal로 선언 되었다면 현재의 어셈블리 또는 그 클래스를 상속받은 파생 클래스에서 접근이 가능 할 것이다.
1. 내포되지 않은 타입
public class Bank1 {}
internal class Bank2 {}
protected class Bank3 {} //오류
private class Bank4 {} //오류
namespace Banking {
public class Bank1 {}
internal class Bank2 {}
protected class Bank3 {} //오류
private class Bank4 {} //오류
}
만약 전역적으로 네임스페이스 내에 타입을 선언하고 아무 한정자를 기술하지 않는 다면 internal로 기본적으로 설정된다.
2. 내포된 타입
class Test {
public class A {}
protected class B {}
protected internal C {} //internal protected로 해도 무방
internal class D {}
private class E {}
}
구조체인 경우 상속 할 수 없기 때문에 구조체 내에 protected나 protected internal을 사용하는 경우에는 오류 발생
public struct s {
protected int a; //오류
protected internal b; //오류
}
소멸자에 접근 한정자를 사용하는 것 역시 오류
class Bank {
internal ~Bank() {} //오류
}
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(8/04)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(8/04)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(8/08)[기업100%환급]SQL기초에서 Schema Object까지
(8/08)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(8/11)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/04)웹퍼블리싱 마스터
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
(8/08)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
주말(10:00~17:50) 개강
(7/26)Spring3.X, MyBatis, Hibernate실무과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)C#,ASP.NET마스터
(8/02)웹퍼블리싱 마스터
(8/02)SQL초보에서 Schema Object까지
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)안드로이드개발자과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(8/04)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(8/04)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(8/08)[기업100%환급]SQL기초에서 Schema Object까지
(8/08)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(8/11)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/04)웹퍼블리싱 마스터
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
(8/08)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
주말(10:00~17:50) 개강
(7/26)Spring3.X, MyBatis, Hibernate실무과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)C#,ASP.NET마스터
(8/02)웹퍼블리싱 마스터
(8/02)SQL초보에서 Schema Object까지
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)안드로이드개발자과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
댓글 없음:
댓글 쓰기