C 언어
캡슐화 '물리적 또는 논리적 패키지 내에 하나 이상의 항목을 묶는 프로세스'로 정의됩니다. 객체 지향 프로그래밍 방법론에서 캡슐화는 구현 세부 정보에 대한 액세스를 방지합니다.
추상화 및 캡슐화는 객체 지향 프로그래밍의 관련 기능입니다. 추상화를 통해 관련 정보를 볼 수 있고 캡슐화를 통해 프로그래머는 원하는 추상화 수준을 구현할 수 있습니다. .
캡슐화는 액세스 지정자를 사용하여 구현됩니다. . 액세스 지정자 클래스 멤버의 범위와 가시성을 정의합니다. C#은 다음 액세스 지정자를 지원합니다 -
공용 액세스 지정자를 사용하면 클래스에서 해당 멤버 변수와 멤버 함수를 다른 함수 및 개체에 노출할 수 있습니다. 모든 공개 멤버는 클래스 외부에서 액세스할 수 있습니다.
다음 예는 이것을 보여줍니다 -
라이브 데모using System; namespace RectangleApplication { class Rectangle { //member variables public double length; public double width; public double GetArea() { return length * width; } public void Display() { Console.WriteLine("Length: {0}", length); Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.length = 4.5; r.width = 3.5; r.Display(); Console.ReadLine(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Length: 4.5 Width: 3.5 Area: 15.75
앞의 예에서 멤버 변수 length와 width는 public으로 선언됩니다. , 따라서 r이라는 Rectangle 클래스의 인스턴스를 사용하여 Main() 함수에서 액세스할 수 있습니다. .
멤버 함수 Display() 및 GetArea() 클래스의 인스턴스를 사용하지 않고 이러한 변수에 직접 액세스할 수도 있습니다.
멤버 함수 Display() 또한 공개로 선언됩니다. , 그래서 Main()에서도 액세스할 수 있습니다. r이라는 이름의 Rectangle 클래스 인스턴스 사용 .
개인 액세스 지정자를 사용하면 클래스가 다른 함수 및 개체에서 해당 구성원 변수 및 구성원 함수를 숨길 수 있습니다. 같은 클래스의 함수만 private 멤버에 액세스할 수 있습니다. 클래스의 인스턴스라도 private 멤버에 액세스할 수 없습니다.
다음 예는 이것을 보여줍니다 -
라이브 데모using System; namespace RectangleApplication { class Rectangle { //member variables private double length; private double width; public void Acceptdetails() { Console.WriteLine("Enter Length: "); length = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Enter Width: "); width = Convert.ToDouble(Console.ReadLine()); } public double GetArea() { return length * width; } public void Display() { Console.WriteLine("Length: {0}", length); Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.Acceptdetails(); r.Display(); Console.ReadLine(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Enter Length: 4.4 Enter Width: 3.3 Length: 4.4 Width: 3.3 Area: 14.52
앞의 예에서 멤버 변수 length와 width는 private로 선언됩니다. , 따라서 Main() 함수에서 액세스할 수 없습니다. 멤버 함수 AcceptDetails() 및 디스플레이() 이러한 변수에 액세스할 수 있습니다. 멤버 함수 AcceptDetails() 및 디스플레이() 공개로 선언됨 , Main()에서 액세스할 수 있습니다. r이라는 이름의 Rectangle 클래스 인스턴스 사용 .
보호된 액세스 지정자를 사용하면 자식 클래스가 기본 클래스의 멤버 변수와 멤버 함수에 액세스할 수 있습니다. 이렇게 하면 상속을 구현하는 데 도움이 됩니다. 상속 장에서 이에 대해 더 자세히 논의할 것입니다.
내부 액세스 지정자를 사용하면 클래스에서 해당 멤버 변수와 멤버 함수를 현재 어셈블리의 다른 함수 및 개체에 노출할 수 있습니다. 즉, 내부 액세스 지정자가 있는 모든 멤버는 해당 멤버가 정의된 응용 프로그램 내에 정의된 모든 클래스 또는 메서드에서 액세스할 수 있습니다.
다음 프로그램은 이것을 보여줍니다 -
라이브 데모using System; namespace RectangleApplication { class Rectangle { //member variables internal double length; internal double width; double GetArea() { return length * width; } public void Display() { Console.WriteLine("Length: {0}", length); Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.length = 4.5; r.width = 3.5; r.Display(); Console.ReadLine(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Length: 4.5 Width: 3.5 Area: 15.75
앞의 예에서 멤버 함수 GetArea() 액세스 지정자와 함께 선언되지 않았습니다. 그러면 언급하지 않는 클래스 멤버의 기본 액세스 지정자는 무엇입니까? 비공개입니다. .
보호된 내부 액세스 지정자는 클래스가 동일한 응용 프로그램 내의 자식 클래스를 제외하고 다른 클래스 개체 및 함수에서 해당 멤버 변수 및 멤버 함수를 숨길 수 있도록 합니다. 상속을 구현할 때도 사용됩니다.
C 언어
자바 ObjectInputStream 클래스 이 자습서에서는 예제를 통해 Java ObjectOutputStream 및 해당 메서드에 대해 알아봅니다. ObjectInputStream java.io 클래스 패키지는 이전에 ObjectOutputStream로 작성된 객체를 읽는 데 사용할 수 있습니다. . InputStream 확장 추상 클래스. ObjectInputStream에 대해 알아보기 전에 클래스, ObjectOutputStream 클래스에 대해 알고 있는지 확인하십시오. ObjectInputStream 작업 O
자바 PrintStream 클래스 이 자습서에서는 예제를 통해 Java PrintStream 클래스와 해당 print() 및 printf() 메서드에 대해 배웁니다. PrintStream java.io 클래스 패키지는 바이트 대신 일반적으로 읽을 수 있는 형식(텍스트)으로 출력 데이터를 쓰는 데 사용할 수 있습니다. 추상 클래스 OutputStream를 확장합니다. . PrintStream 작업 다른 출력 스트림과 달리 PrintStream 기본 데이터(정수, 문자)를 바이트 대신 텍스트 형식으로 변환합니다. 그런 다음