yeahzzz
archive
yeahzzz
전체 방문자
오늘
어제
  • 분류 전체보기 (164)
    • Language (41)
      • Python (12)
      • JAVA (21)
      • C&C++ (8)
    • Algorithms (25)
      • programmers (9)
      • study log (16)
    • Problems & Solutions (14)
    • Major (29)
      • Data Structure & Algorithm (14)
      • Linux(Ubuntu) (9)
      • Security (2)
      • Linear Algebra (4)
    • FE (44)
      • Web(HTML5, CSS, JS) (5)
      • React & TS (26)
      • 코딩일기 (10)
    • BE (1)
      • Node.js (1)
    • Pytorch (8)
    • Server (2)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yeahzzz

archive

Language/JAVA

클래스, getter그리고setter, 접근한정자

2021. 8. 1. 14:54

은닉성 

멤버변수나 메서드가 객체에 노출되지 않도록 설정하는 기법

객체를 사용하는 측의 실수로 인한 기능의 오작동을 방지하기 위해 클래스의 일부를 숨기는 처리.

변수의 이름이나 메서드 이름 앞에 접근 한정자를 지정. 

 

접근 한정자  

public - 모든 곳에서 접근 가능.일반적으로 모든 메서드 앞에 명시

private- 클래스 안에서만 사용가능, 객체를 통해 접근 ㄴㄴ. 일반적으로 모든 멤버변수 앞에 명시 

protected - 현재 클래스 내의 다른 자원이나 같은 패키지 안에서 존재하는 클래스와 하위 클래스에서 접근가능. 잘 사용 하지는 않음

default - 접근 한정자를 명시하지 않은 경우, 현재 클래스 내의 다른 자원이나 동일 패키지 내의 다른 클래스에서 접근 가능. 잘 사용하지는 않음

 

getter, setter : 은닉된 멤버변수에 간접적으로 접근하기 위하여 정의된 메서드를 의미

멤버변수가 은닉된 형태로 선언된 경우 프로그램의 가장 근본적인 목적인 데이터에 접근하는 방법이 사라짐.

따라서 메서드를 통하여 간접적으로 접근하는 방법이 마련. 

getter : 은닉된 멤버변수의 값을 리턴하기 위한 메서드

setter : 파라미터로 전달된 값을 멤버변수에 복사하기 위한 메서드 

 

ex)

멤버변수 이름 getter setter
String userName String getUserName() void setUserName(String param)
int userAge int getUserAge() void setUserAge(int parma)

get,set 접두사 뒤에 변수이름을 첫 글자가 대문자인 형태로 명시

getter : 연결된 멤버변수의 데이터 타입을 리턴형으로 명시

setter : 연결된 멤버변수의 데이터 타입을 파라미터 형으로 명시

 

 

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package day8;
 
//이 클래스 안에서만 
class Me2{
    private String name; //메인부분에서 다이렉트로 접근 못함. 
    //따라서 메서드를 이용해서 간접적으로 접근 가능 
    private int age;
    //위 애들은 전역변수 
    
    public void setName(String name) {
        this.name = name; //name에는 학생이 담김. 
    }
    
    //setAge를 통해서만 age의 값을 세팅해줌. 
    //public을 걸어줘서 외부에서 접근 가능하게 만듦 
    public void setAge(int age) { //여기 age는 파라미터 성격을 갖는 지역변수 
        if (age<=100) {
            this.age = age; 
        }
    }
    
    // 은닉된 멤버변수의 값을 읽는 방법 
    public String getName() {
        return this.name; //만약 그냥 return name; 이면 가장 위에 선언했던 전역변수 name을 의미
    }
    
    public int getAge() {
        return this.age;
    }
}
 
public abstract class Two {
 
    public static void main(String[] args) {
        Me2 me2 = new Me2();
        me2.setName("지렁이");
        me2.setAge(21);
        
        String name = me2.getName();
        System.out.println(name);
        
        System.out.println(me2.getAge());
 
    }
 
}
 
Colored by Color Scripter
cs

 

클래스의 접근 한정자를 지정한 경우

public - 객체 생성 가능. 서로 다른 소스코드에 정의된 클래스끼리도 객체 생성 가능

private: 클래스에 적용 불가

protected  - 클래스에 적용 불가. 

defaul - 동일한 소스코드에 정의된 클래스끼리만 객체로 생성 가능. 

 

클래스의 분리

하나의 소스코드에서 프로그램의 모든 기능을 구현하게 되면 유지보수에 비효율적, 기능단위로 소스코드 분리

일반적으로 클래스 정의에는 public 접근한정자만 사용

하나의 소스코드 - 하나의 public 클래스 존재 

 

자바빈즈 : 자바 언어에서 사용하는 복합적 데이터 표현의 최소 단위

재사용 가능한 컴포넌트(구성요소) 생성 가능

자바 빈즈 클래스로서 작동하기 위해서 객체 클래스는 명명법, 생성법 그리고 행동에 관련된 일련의 관례를 따라야만 함. 이 관례는 개발도구에서 자바빈즈와의 연결을 통하여 클래스의 사용&재사용&클래스 재배치 가능하게 함 

 

*관례

- 클래스는 생성자를 가지고 있어야 함

- 클래스의 속성은 get,set 혹은 표준 명명법을 따르는 메서드를 사용해 접근할 수 있어야 함 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package day8;
/*
 * 하나의 게시물을 표현하기 위한 자바빈즈
 */
public class Three2 {
    
    private int seq; //글 번호
    private String subject; //글 제목
    private String content; //글 내용
    private String writer; //작성자
    private int hit; //조회수
    private String regDate; //작성일시
    
 
    public Three2(int seq, String subject, String content, String writer, int hit, String regDate) {
        super();
        this.seq = seq;
        this.subject = subject;
        this.content = content;
        this.writer = writer;
        this.hit = hit;
        this.regDate = regDate;
    }
 
    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;
    }
    
    
public static void main(String[] args) {
        Three three = new Three(25,"0801","내용필기","지렁이",25,"20210801");
 
        System.out.println(three.getContent());
        System.out.println(three.getHit());
        System.out.println(three.getRegDate());
        System.out.println(three.getSeq());
        System.out.println(three.getSubject());
        System.out.println(three.getWriter());
 
    }
 
}
 
Colored by Color Scripter
cs

'Language > JAVA' 카테고리의 다른 글

객체 배열 / 추상화  (0) 2021.08.31
다형성(오버라이드,오버로드)/객체 형변환/암묵적 형변환  (0) 2021.08.08
Constructor  (0) 2021.07.29
JAVA Inheritance  (0) 2021.07.28
Method  (0) 2021.07.27
    'Language/JAVA' 카테고리의 다른 글
    • 객체 배열 / 추상화
    • 다형성(오버라이드,오버로드)/객체 형변환/암묵적 형변환
    • Constructor
    • JAVA Inheritance
    yeahzzz
    yeahzzz

    티스토리툴바