Do it! 자바 프로그래밍 입문 / 5.5 생성자 ~ 5.7 정보 은닉

2022. 12. 29. 06:03·Programming Language/자바(JAVA)
public class Student_Test
{
    public static void main(String[] args)
    {
        Student st = new Student();
        st.setName("토자맨");
        System.out.println(st.getName());
    }
}

5.5 생성자

package chapter5;
public class Person 
{
    String name;
    float height;
    public static void main(String[] args)
    {
        Person cho = new Person();
    }
}

new Person() 의 Person()이 (디폴트)생성자이다.

생성자는 클래스 객체를 생성할 때 멤버 변수, 상수를 초기화 하는 역할을 한다.

디폴트 생성자는 생성자를 하나도 작성하지 않았을 때 컴파일러가 자동으로 생성해주는 생성자이다.

- 생성자를 직접 선언해주는 경우 -

public class Person
{
    String name;
    float height;

    public Person() {} // 디폴트 생성자 직접 추가
    public Person(String pname) // 매개변수를 받는 생성자 추가
    {
        name = pname;
    }
}

위와같이 생성자를 직접 설정할 수 있으며 생성자를 하나라도 추가 했다면 디폴트 생성자는 자동으로 생성되지 않으므로 직접 디폴트 생성자를 작성해줘야한다(필수는 아님).

보통 특정 변수가 반드시 있어야 할 때 이용한다.

여러 생성자를 선언해주는 경우 필요한 생성자를 골라서 사용할 수 있다

5.6 참조 자료형

public class Student
{
    String name;
    Subject korean;
    Subject mate;
}
public class Subject
{
    String SubjectName;
    int score;
}

String은 JDK(Java Development Kit)에서 제공하는 참조 자료형(클래스)이고

Subject는 사용자가 직접 만든 클래스를 사용한 참조 자료형이다.(c언어의 구조체 느낌)

5.7 정보 은닉

접근 제어자 : 클래스 내부의 변수나 메서드 생성자에 대한 접근 권한을 지정하는 예약어

public 외부 클래스에서 접근 가능
protected 같은 패키지 내부와 상속 관계에서 접근 가능하고 그 외 클래스에서 접근 불가능
private 같은 클래스 내부에서만 접근 가능
defalut 같은 패키지 내부에서만 접근 가능(아무것도 적지 않음)
public class Student
{
    private String name;
}

name 변수를 private으로 선언

public class Student_Test
{
    public static void main(String[] args)
    {
        Student st = new Student();
        st.name = "cho";
        System.out.println(st.name);
    }
}

외부 클래스인 Student_Test 클래스에서는 Student 클래스의 private 변수에 접근할 수 없음

private 접근 제어자 때문에 변수에 직접 접근할 수 없는 경우 메서드(함수)를 이용해서 간접 접근하는 방법

public class Student
{
    private String name;

    public String getName()
    {
        return name;
    }
    public void setName(String stname)
    {
        this.name = stname;
    }
}

private name 변수에 간접 접근하기 위해 public 메서드를 생성한다.

public class Student_Test
{
    public static void main(String[] args)
    {
        Student st = new Student();
        st.setName("토자맨");
        System.out.println(st.getName());
    }
}

다른 클래스에서 public 메서드를 이용해서 간접 접근한다.

정보 은닉이란? (굳이 private으로 변수를 설정하고 public 메소드로 간접 접근하는 이유)

public class MyDate
{
    private int day;
    private int month;

    public void setDay(int day)
    {
        if (month == 2) {
            if (day < 1 || day > 28)
                System.out.println("오류입니다");
            else
                this.day = day;
        }
    }
}

만약 day, month 변수를 public으로 선언했다면 2월달은 28일까지 있지만 31일로 설정할 수도 있음. 즉 오류 발생 가능

따라서, 이러한 오류 발생 가능성을 차단하기 위해서 private으로 설정하고 public 메소드를 이용해서 간접 접근하면서 오류를 걸러주는 것

'Programming Language > 자바(JAVA)' 카테고리의 다른 글

Do it! 자바 프로그래밍 입문 / 9장 추상 클래스  (0) 2023.01.04
Do it! 자바 프로그래밍 입문 / 8장 상속  (2) 2023.01.03
Do it! 자바 프로그래밍 입문 / 7장 배열과 ArrayList  (0) 2022.12.31
Do it 자바 프로그래밍 입문 연습문제 6장  (0) 2022.12.30
Do it! 자바 프로그래밍 입문 / 6장 클래스와 객체 2  (0) 2022.12.30
'Programming Language/자바(JAVA)' 카테고리의 다른 글
  • Do it! 자바 프로그래밍 입문 / 8장 상속
  • Do it! 자바 프로그래밍 입문 / 7장 배열과 ArrayList
  • Do it 자바 프로그래밍 입문 연습문제 6장
  • Do it! 자바 프로그래밍 입문 / 6장 클래스와 객체 2
토자맨
토자맨
  • 토자맨
    개발하는 토자맨
    토자맨
  • 전체
    오늘
    어제
    • 개발 공부
      • 코딩 테스트
        • 코드업 기초 100제
        • 백준
        • 99클럽
        • 자료구조
        • 알고리즘
      • Programming Language
        • 자바(JAVA)
      • Back-end
        • Spring
      • Front-end
        • html
        • css
      • DevOps
        • AWS
        • CI CD
        • Docker
        • 홈서버
        • Git
      • Computer Science
        • 자료구조
        • 알고리즘
        • 운영체제
        • OS,Network,DB,DesignPattern
      • 프로젝트
        • 웨이트 쇼핑몰
      • 공부 로드맵
        • 2학년 겨울방학
        • 3학년 2학기
        • 3학년 겨울방학
      • 일상
        • 기타 정보
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스프링 #spring #스프링 컨테이너 #스프링 컨텍스트
    이진탐색 #이분탐색 #알고리즘
    백준 #dfs #11725번
    bfs #프로그래머스
    오블완
    프로그래머스 #dfs
    solid #객체지향설계원칙
    싱글톤 패턴 #싱글톤 컨테이너 #싱글톤 레지스트리 #싱글톤 객체 상태 #무상태 #stateless #유지상태 #staleful
    백준 #아기상어2 #bfs
    dfs #백준
    nvidia container toolkit #
    백준 #dp #동적계획법
    백준 #이진탐색 #이분탐색
    git filter-repo
    티스토리챌린지
    git filter-branch #commit 수정 #commit
    이진탐색 #이분탐색 #백준
    dp #백준 #동적계획법
    bfs #최단거리탐색 #프로그래머스
    bfs #백준
    백준 #dfs #알고리즘
    피보나치 수 #백준 #dp
    스프링핵심원리 #김영한 #의존관계자동주입 #의존관계 자동 주입
    프로그래머스 #dp
    nvidia-docker #docker cuda #docker gpu #엔비디아 도커
    dfs #알고리즘
    백준 #bfs
    ec2 멈춤 #ec2 터짐 #ec2 ssh 연결 끊김 #ec2 끊김
    백준 #dfs
    99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #til
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
토자맨
Do it! 자바 프로그래밍 입문 / 5.5 생성자 ~ 5.7 정보 은닉
상단으로

티스토리툴바