encapsulation java
답변이 포함 된 소프트웨어 테스트 인터뷰 질문
예제, 필요한 이유, 관련 getter 및 setter 메서드를 통해 Java의 캡슐화에 대해 알아보십시오.
이 자습서에서는 또 다른 OOP 개념 인 '캡슐화'에 대해 설명합니다. OOP에는 추상화, 캡슐화, 다형성 및 상속이라는 네 가지 기둥이 있습니다.
추상화는 최종 사용자에게 관련 세부 정보 만 노출하는 데 사용되지만 캡슐화는 주로 데이터 보안을 다룹니다. 데이터 보안을 보장하기 위해 캡슐화는 액세스 수정자를 지정하여 원치 않는 액세스로부터 데이터 멤버를 보호하고 데이터를 단일 단위로 묶습니다.
=> 여기에서 완벽한 Java 교육 가이드를 확인하십시오.
그렇다면 Java에서 캡슐화를 어떻게 정의 할 수 있습니까?
캡슐화의 정의
'Java의 캡슐화는 해당 데이터에 대해 작동하는 데이터와 메소드를 랩핑하여 단일 단위를 형성하는 메커니즘으로 정의 할 수 있습니다.'
학습 내용 :
자바에서 캡슐화 란?
캡슐화를 사용하여 다른 클래스에서 클래스 데이터 멤버 (변수)를 숨길 수도 있습니다. 이러한 데이터 멤버 변수는 선언 된 클래스의 메서드를 사용하여 간접적으로 액세스 할 수 있습니다. 차례로 메서드는 해당 클래스의 개체를 사용하여 액세스됩니다.
따라서 위의 정의에서 결론은 클래스 내부에 데이터 멤버 변수를 숨겼으며 다른 클래스에서 액세스 할 수 없도록 액세스 한정자를 지정했다는 것입니다.
따라서 캡슐화는 또한 일종의 '데이터 숨김'이지만 자습서의 뒷부분에서 캡슐화가 데이터 숨김과 동일하지 않음을 알 수 있습니다.
위의 그림은이 데이터에서 작동하는 데이터와 메서드를 하나의 단위로 묶는 캡슐화 단위 인 클래스를 나타냅니다.
캡슐화는 주로 데이터를 다루기 때문에 '데이터 캡슐화'라고도합니다.
캡슐화를 의료용 캡슐로 시각화 할 수 있습니다. 우리 모두 알다시피 약은 의료용 캡슐 안에 들어 있습니다. 마찬가지로 데이터와 메서드는 캡슐화의 단일 단위로 묶여 있습니다.
따라서 캡슐화는 데이터를 보호하는 보호막 역할을하고 외부 세계의 무단 액세스로부터 데이터를 방지합니다. 즉, 애플리케이션의 민감한 데이터를 보호합니다.
Java에서는 캡슐화를 구현하는 두 단계가 있습니다. 단계는 다음과 같습니다.
- 액세스 한정자‘private’를 사용하여 클래스 멤버 변수를 선언합니다.
- 이러한 개인 멤버 변수에 액세스하고 해당 값을 변경하려면 각각 공용 getter 및 setter 메서드를 제공해야합니다.
이제 Java로 캡슐화의 예를 구현해 보겠습니다.
자바 캡슐화 예
//Student_Id and name bundled in a unit 'Student' => encapsulation class Student { private int Student_Id; private String name; //getters, setters for Student_Id and name fields. public int getId() { return Student_Id; } public void setId(int s_id) { this.Student_Id = s_id; } public String getname() { return name; } public void setname(String s_name) { this.name = s_name; } } class Main{ public static void main(String() args) { //create an object of Student class Student s=new Student(); //set fields values using setter methods s.setId (27); s.setname('Tom Lee'); //print values using getter methods System.out.println('Student Data:' + '
Student ID:' + s.getId() + ' Student Name:' + s.getname()); } }
산출:
교차 사이트 스크립팅을 수행하는 방법
위의 프로그램에서 우리는 캡슐화 단위 인 클래스를 선언합니다. 이 클래스 Student는 데이터 (Student_Id 및 이름)와 이러한 구성원의 값을 읽고 설정하는 방법을 단일 단위로 묶었습니다.
멤버 필드와 연관된 액세스 수정자를 기록하십시오. 두 멤버 필드는 모두 비공개이므로 Student 클래스 외부에서 액세스 할 수 없습니다.
이러한 필드의 값을 읽을 수있는 getter (getId 및 getname)와 이러한 메서드의 값을 설정하는 setter 메서드 (setId 및 setname)를 제공합니다. 이것이 그들이 가진 유일한 액세스 권한이며 Student 클래스 개체를 사용하여 수행해야합니다.
게터 및 세터 메서드
Java에서 캡슐화를 구현하기 위해 클래스의 데이터 멤버 변수를 전용으로 만듭니다. 이제 이러한 개인 변수는 클래스 객체를 포함하여 클래스 외부의 어떤 것도 액세스 할 수 없습니다.
이것은 다음과 같이 클래스 ABC가있는 경우를 의미합니다.
클래스 ABC {
개인 int 나이;
}
다음과 같이 ABC 클래스의 개체를 만들어 보겠습니다.
ABC abc = 새 ABC ();
abc.age = 21; // 컴파일러 오류
따라서 위 코드에서 클래스 객체를 사용하여 전용 변수에 액세스하면 컴파일러 오류가 발생합니다.
개인 변수에 액세스하고 해당 값을 읽고 새 값을 설정하려면이를 수행하는 방법이 필요합니다. 따라서 Java는 getter 및 setter 메소드를 사용하여 개인 변수에 액세스하는 방법을 제공합니다.
Getter 및 Setter는 개인 변수의 값을 생성, 수정, 삭제 또는보기 위해 사용할 수있는 공용 메서드입니다.
아래 프로그램은 Getter 및 Setter 메서드의 예입니다.
//Account class - private data members bundled with getters and setters class Account { //private data members private long acc_no; private String name,email; private float amount; //public getter and setter methods for each data member public long getAcc_no() { return acc_no; } public void setAcc_no(long acc_no) { this.acc_no = acc_no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public float getAmount() { return amount; } public void setAmount(float amount) { this.amount = amount; } } public class Main { public static void main(String() args) { //create instance of Account class Account myAcc=new Account(); //set values for data members through setter methods myAcc.setAcc_no(775492842L); myAcc.setName('SoftwareTestingHelp.com'); myAcc.setEmail('sth_account@sth.com'); myAcc.setAmount(25000f); //read data member values through getter methods System.out.println('Account No:' + myAcc.getAcc_no()+' '+'Account Name:' + myAcc.getName()+'
'+'Account holder email:' + myAcc.getEmail()+'
' + 'Amount in Account:' + myAcc.getAmount()); } }
산출:
위의 프로그램에는 계정 클래스가 있으며 계정과 관련된 4 개의 개인 변수가 있습니다. 모든 데이터 멤버가 비공개이므로 이러한 각 변수에 대해 getter 및 setter 메서드를 제공했습니다.
우선 순위 대기열 자바를 사용하는 dijkstra의 알고리즘
메인 메서드에서 Account 클래스의 객체를 통해 액세스되는 공용 getter 및 setter 메서드를 사용하여 이러한 개인 변수의 값을 읽고 설정합니다.
Java에서 데이터 숨기기
종종 우리는 캡슐화와 데이터 숨김을 같은 의미로 사용합니다. 그러나 둘 다 동일하지 않습니다. Java 캡슐화는 관련 데이터를 단일 단위로 그룹화하여 더 나은 데이터 관리 및 보안을 보장합니다.
반면 데이터 숨김은 구현 세부 정보를 숨김으로써 데이터 멤버 액세스를 제한합니다. 캡슐화가 정확히 데이터를 숨기는 것은 아니지만 데이터를 숨기는 방법을 제공합니다. 데이터 숨김은 액세스 수정자를 사용하여 수행됩니다.
Java는 네 가지 액세스 수정자를 제공합니다.
- 공공의: 모든 사람이 액세스 할 수 있습니다.
- 은밀한: 클래스 내에서만 액세스 할 수 있습니다.
- 보호됨 : 포함하는 패키지 및 하위 클래스에 액세스 할 수 있습니다.
- 기본: 패키지 내에서 액세스 할 수 있습니다.
캡슐화는 데이터를 단일 단위로 묶기 때문에 데이터를 숨 깁니다. 또한 데이터를 비공개로 만들어 외부 세계에서 액세스 할 수 없습니다. 데이터를 비공개로 만들기 위해 데이터 숨김 개념 인 액세스 수정자를 비공개로 사용합니다.
동시에, 추상화의 정의 인 구현 세부 사항을 노출하지 않고 관련 세부 사항 만 최종 사용자에게 제공됩니다. 따라서 캡슐화를 추상화와 데이터 숨김의 조합으로 볼 수 있습니다.
캡슐화가 필요한 이유
자바에서 캡슐화가 필수적인 이유는 여러 가지가 있습니다.
- 캡슐화를 통해 다른 함수 나 코드를 변경하지 않고도 코드 또는 코드의 일부를 수정할 수 있습니다.
- 캡슐화는 데이터에 액세스하는 방법을 제어합니다.
- 캡슐화를 사용하여 요구 사항에 따라 코드를 수정할 수 있습니다.
- 캡슐화는 애플리케이션을 더 간단하게 만듭니다.
자주 묻는 질문
Q # 1) Java에서 캡슐화가 사용되는 이유는 무엇입니까?
대답: Java의 캡슐화는 대부분 데이터를 숨기는 데 유용합니다. 즉, 데이터에 액세스 할 수있는 사람과 액세스 할 수없는 사람을 결정하는 것입니다.
Q # 2) OOP에서 캡슐화 란 무엇입니까?
대답: 캡슐화는 객체 지향 프로그래밍 언어의 중요한 기둥 중 하나이며 해당 데이터에서 작동하는 데이터 및 메서드를 단일 단위로 묶는 작업을 처리합니다. 예를 들면 Java의 클래스는 캡슐화 된 구조입니다. 캡슐화는 또한 데이터에 대한 액세스 제공과 관련된 결정을 다룹니다.
Q # 3) 자바 캡슐화의 장점은 무엇입니까?
대답: 자바 캡슐화의 주요 장점은 데이터 숨김입니다. 캡슐화를 사용하면 프로그래머가 데이터에 대한 액세스와 해당 데이터에 대해 작동하는 방법을 결정할 수 있습니다. 예를 들면 특정 데이터가 클래스 외부의 누구에게도 액세스 할 수 없도록하려면 해당 데이터를 비공개로 설정합니다.
Q # 4) 캡슐화 과정은 무엇입니까?
대답: 캡슐화는 하나의 형식 또는 프로토콜 (네트워킹 용어로)에서 데이터를 선택하고이를 다른 형식 또는 프로토콜로 변환하거나 다시 형식화하여 애플리케이션 또는 네트워크에서 데이터에 액세스 할 수 있고 동시에 보호되도록하는 프로세스입니다.
Q # 5) 데이터 캡슐화의 마지막 단계는 무엇입니까?
대답: 캡슐화의 마지막 단계는 사용자 정보를 동등한 데이터로 변경하는 것입니다. 그런 다음이 데이터는 데이터 패킷으로 추가 변환되는 세그먼트로 변경됩니다. 데이터 패킷은 소프트웨어 환경에서 이리저리 전송 될 수있는 논리 프레임에 배치됩니다.
결론
이것으로 자바 캡슐화에 대한 튜토리얼을 마칩니다. 캡슐화는 멤버 변수와 이러한 데이터 멤버에서 작동하는 메서드를 단일 단위로 묶는 기술입니다. Java의 클래스는 데이터와 메서드를 단일 단위로 래핑하기 때문에 캡슐화의 고전적인 예입니다.
Java는 모든 데이터 멤버를 개인용으로 만든 다음 공용 인 getter 및 setter 메서드를 제공하여 캡슐화 구현을 달성하여 개인 변수의 값을 읽고 이러한 변수에 대한 새 값을 설정할 수 있습니다.
=> 독점적 인 Java 교육 자습서 시리즈를 보려면 여기를 방문하십시오.