class Animal {
...
}
public class Main {
public static void main(String[] args) {
Animal cat, dog; // 객체
// 인스턴스화
cat = new Animal(); // cat은 Animal 클래스의 '인스턴스'
// 객체를 메모리에 할당
dog = new Animal();
}
}
클래스에 접근 한정자를 지정한 경우
접근 한정자 설명
public 객체 생성이 가능하다.
서로 다른 소스코드에 정의된 클래스끼리도 객체 생성이 가능하다.
private 클래스에 적용할 수 없다.
protected 클래스에 적용할 수 없다.
default 동일한 소스코드에 정의된 클래스끼리만 객체로 생성 가능하다
(지금까지의 예제 형태)
package hiding;
public class Main01 {
public static void main(String[] args) {
// 객체생성
StudentJava2 stdjava = new StudentJava2();
// 동일한 파일 안에 StudentJava2 클래스가 없기때문에
// StudentJava2 클래스를 만들기 전까지는 오류가 뜬다.
// setter 임의의 데이터 세팅, name, age 모두
stdjava.setAge(25);
stdjava.setName("자바학생");
// getter 출력, name, age 모두
System.out.println( stdjava.getAge() );
System.out.println( stdjava.getName() );
// 객체안에 내용이 없으면 오류
// (즉, getter와 setter가 없으면 호출을 할 수 없음)
}
}
package hiding;
public class StudentJava2 {
// 은닉된 멤버변수 -> 현재 블록 안에서만 접근 가능함
private String name;
private int age;
// getter 메서드 2개
// 은닉된 멤버변수의 값을 읽는 방법
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
// setter 메서드 2개
// 은닉된 멤버변수에 값을 넣는 방법
public void setName( String name ) {
this.name = name;
}
public void setAge( int age ) {
this.age = age;
}
}
-> 이런식으로 구성되어 있는 것을 자바빈즈라고 한다.
** 캡슐화
- 접근 제한자는 객체지향의 캡슐화, 그리고 그를 통한 은닉화를 위한 도구이다.
- 데이터를 외부로부터 숨기거나, 접근을 막고, 또는 접근에 처리를 강제화한다.
- 유사한 기능이나 변수를 한 집합으로 하여 더 관리하기 쉽게 하고 코드를 명확히 함
- 외부에서 멤버를 엑세스하는 방법을 지정할 수 있도록, 직접 접근을 막거나 접근 전, 부가적인 처리를 요구함
- 정보를 외부에 은닉하여 외부에서는 해당 집합의 세부 내용에 집중하지 않도록 함
class Person {
int age;
void howOld() {
System.out.print(age);
}
class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.age = -1;
p1.howOld();
}
}
-----------------------------------------------------------
class Person {
private int age;
public void setAge(int age) {
if(age >= 0) {
this.age = age;
}else {
this.age = 0;
}
}
void howOld() {
System.out.println(age);
}
}
class Main {
public static void main(String[] args) {
Pserson p1 = new Person();
p1.setAge(-1);
p1.howOld();
}
}
result
-1
0
class Person {
private int age;
private String name;
private Strign hobby;
private String gender;
public void setGender(String gender) {
this.gender = gender;
}
public void setAge(int age) {
if(age >= 0) {
this.age = age;
} else {
this.age = 0;
}
}
void howOld(){
System.out.println(age);
}
}
// 하나의 게시물을 표현하기 위한 JavaBeans
public class Article {
private int seq; // 글 번호
private String subject; // 글 제목
private String content; // 글 내용
private String writer; // 작성자
private int hit; // 조회수
private String regDate; // 작성일자
// 파라미터가 있는 생성자
public Article(int seq, String subject, String content,
String writer, int hit, String regDate) {
this.seq = seq;
this.subject = subject;
this.content = content;
this.writer = writer;
this.hit = hit;
this.regDate = regDate;
}
// getter, setter 추가
public int getSeq() {
return seq;
}
public void setSeq(int seq) {
this.seq = seq;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public int getHit() {
return hit;
}
public void setHit(int hit) {
this.hit = hit;
}
public String getRegDate() {
return regDate;
}
public void setRegDate(String regDate) {
this.regDate = regDate;
}
}
// main 메서드를 포함하고 있는 클레스에서
// 객체 생성 및 항목들 출력
public class Main03 {
public static void main(String[] args) {
Article art = new Article(1, "테스트 게시물",
"첫번째 게시물", "JAVA학생", 0, "2022-03-17");
System.out.println( art.getSeq() );
System.out.println( art.getSubject() );
System.out.println( art.getContent() );
System.out.println( art.getWriter() );
System.out.println( art.getHit() );
System.out.println( art.getRegDate() );
}
}
result
1
테스트 게시물
첫번째 게시물
JAVA학생
0
2022-03-17