검색결과 리스트
자바 protected에 해당되는 글 2건
- 2017.09.15 자바 Encapsulation Java 캡슐화!
- 2017.09.13 Java) 접근제한자 Access Modifier에 대해서!
/*
* 1. 자바에서 Encapsulation이란 데이터와 코드를 단일 유닛에 포장하는 과정을 의미한다.
* 애초에 캡슐 자체 다양한 종류의 약을 위까지 안적하게 이동시키기 위해 만들어졌기때문에 일맥상통한다고 볼 수 있다.
* 우리는 완벽히 캡슐화된 클래스를 private class를 통해 만들 수 있다.
* 그리고는 Getter&Setter를 통해 안전히 접근할 수 있다.
*
* 2. 캡슐화의 장점.
* Getter&Setter를 통해서 클래스를 Read-Only 혹은 Write-Only로 만들 수 있다.
* 일단 게터와 세터를 통하면 근본 데이터의 오염을 방지할 수 있으며 다형성의 원리에 매우 부합하여
* 나중에 유지보수성성이 높아진다는 의미이니 생활화하도록하고, 나중에는 프레임워크로 대체할테니
* 개념과 실습으로 마무리 지어놓자
*/
package com.encapsulation;
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name){
this.name=name ;
}
}
package com.encapsulation;
class Test {
public static void main(String[] args) {
Student s = new Student();
s.setName("vijay");
System.out.println(s.getName());
}
}
// vj jay라는 결과값이 나온다. 직접 Student의 필드값에 접근하지않고 setter를 통하여
// 필드의 값을 초기화한 후 getter를 통해 가져왔다. 이 과정은 모두 간접적으로 이루어졌다는걸 명시하자.
// 딱히 더 설명할게 없지만 객체지향프로그맹에서 핵심 이론을 맡고있다.
// 자세한 내용은 추후에 구글링으로 더 덧붙이도록 하겠다.
Java Array 자바 배열편! (0) | 2017.09.25 |
---|---|
Call Of Value, Preference in Java 값호출, 참조호출 자바 (0) | 2017.09.20 |
Java) 접근제한자 Access Modifier에 대해서! (0) | 2017.09.13 |
Java) Static Binding + Dynamic Binding (0) | 2017.08.11 |
자바 다형성의 종류. (0) | 2017.08.09 |
반갑습니다. 발전소장 에르입니다 :) 이번 시간에 다뤄볼 주제는 '접근 제한자' 요놈인데요.
쉽게 말하면 기숙사의 방마다에 위치한 '도어락'같은 아이입니다.
자바에서는 '접근 제한자'와 '비-접근 제한자'로 두가지 타입이 존재합니다.
데이터 멤버, 메소드, 생성자, 클래스들의 스코프를 지정해주는 접근제한자로는 4가지가 있는데
1. private
2. default
3.protected
4.public
위와 같이 되어있으며, 특히 4번쨰 public은 매우 익숙하리라 단언합니다.
그리고 비-접근 제어자로는 static, abstract, synchronized, native, volatile, transient 등이 있습니다만,
우리가 오늘 메인으로 다룰 주제는 위에서도 언급했다싶이 ' 접근 제한자' 입니다.
1) private access modifier
클래스 내부에서만 공유할 수 있는 제한자입니다.
package com.access.modifier;
class A {
// private 필드와 메소드를 가진 A라는 클래스가 있고,
private int data = 40;
private void msg() {
System.out.println("Hello java");
}
}
public class Simple {
//메인메소드를 가지고있는 Simple클래스
public static void main(String args[]) {
A obj = new A();
//A 인스턴스를 만들어 A가 가지고있는 필드와 메소드에 접근하고자합니다만.!!
System.out.println(obj.data);// Compile Time Error
obj.msg();// Compile Time Error
}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The field A.data is not visible
The method msg() from the type A is not visible
at com.access.modifier.Simple.main(Simple.java:18)
라는 에러를 뱉어주는데요, 다른 방 학생이 옆 방에서 물건을 가지고 갈려는데 비밀번호가 걸려있어서 못들어가는거라고
보시면 되실거같네요.
다음엔 private 생성자의 역할을 알아봅시다.
만약 private 생성자를 가진 클래스가 있다고 가정할때, 다른 클래스에서는 해당 클래스를 생성할 수가 없게됩니다.
class A {
private A() {
}// private 생성자
void msg() {
System.out.println("Hello java");
}
}
public class Simple {
public static void main(String args[]) {
A obj = new A();// Compile Time Error
}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The constructor A() is not visible
at com.access.modifier.Simple.main(Simple.java:12)
라고 뜨네요, 왜냐면 인스턴스를 만들때 필요한건 생성자인데 이 생성자에 접근을 할 수 없으니 만들 수가 없는거죠.
물과 냉장고는 있는데 각얼음을 만들기위한 틀이 없다고나할까나..
package com.access.modifier;
class A {
void msg() {
System.out.println("Hello");
}
}
=====================================================
package com.access1.modifier;
//save by B.java
import com.access.*;
class B {
public static void main(String args[]) {
A obj = new A();// Compile Time Error
obj.msg();// Compile Time Error
}
}
class A의 제한자가 default이기때문에 같은 패키지에서만 호출이 가능한데
class B에서 다른 패키지에 있는 A를 호출할려고했기떄문에 자바가 '안되, 돌아가'하며 컴파일 에러를 뱉은 상황입니다.
package com.access.modifier;
public class A{
protected void msg(){System.out.println("Hello");}
}
======================================================
package com.access1.modifier;
import com.access.modifier.*;
class B extends A {
public static void main(String args[]) {
B obj = new B();
obj.msg();
}
}
Hello
비록 A,B의 패키지는 서로 다르지만, B가 A를 상속했기 때문에 A의 method를 호출할 수 있었습니다.
package com.access.modifier;
public class A {
public void msg() {
System.out.println("Hello");
}
}
===================================================
package com.access1.modifier;
import com.access.modifier.*;
class B {
public static void main(String args[]) {
A obj = new A();
obj.msg();
}
}
Hello
..뭐 설명할게 없는 관계로 패스..!
밑에 정리표를 마지막으로 마무리하겠습니다:)
Call Of Value, Preference in Java 값호출, 참조호출 자바 (0) | 2017.09.20 |
---|---|
자바 Encapsulation Java 캡슐화! (0) | 2017.09.15 |
Java) Static Binding + Dynamic Binding (0) | 2017.08.11 |
자바 다형성의 종류. (0) | 2017.08.09 |
자바 Final Keyword 2편! (0) | 2017.08.08 |
RECENT COMMENT