티스토리 뷰
Java/Java Basic
[Java] 2-02 - 클래스의 구조 - 접근제한자와 정보은닉, 메서드 자동 생성, Getter(), Setter(), toString()
jhk828 2021. 1. 9. 00:041. 클래스의 구조와 객체 생성
1. 클래스의 구조
- 클래스의 선언부와 몸체로 나뉘고 몸체에는 클래스의 멤버가 선언됨
- 클래스의 멤버 구성
- 객체 초기화 - 생성자 Constructor
- 클래스의 속성 정의 - 멤버 변수 Variable
- 클래스의 데이터를 조작, 변환 - 메서드 Method
// Employee.java
public class Employee {
// 멤버 변수
private String name; // 이름
private int number; // 사번
private String dept; // 근무 부서
// 생성자
public Employee(String name, int number, String dept) {
this.name = name;
this.number = number;
this.dept = dept;
}
// 메서드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
}
클래스 Modifier
접근 권한 예약어 | 활용 방법 예약어 |
public, protected, private, (default) | final, abstract, static, trainsient, volatile, synchronized, native |
- public : 모든 클래스에서 접근 가능한 클래스
final
: 자식 클래스를 가질 수 없는 클래스abstract
: 객체 생성이 불가능한 추상 클래스- 접근 권한 관련 Modifier를 지정하지 않으면, 같은 패키지 내의 클래스에서만 접근 가능
- 서로 다른 패키지의 클래스 접근 - public
클래스의 UML 표기법
Unified Modeling Language
소프트웨어 개념을 다이어그램을 그리기 위해 사용하는 시각적 표기법
객체지향 프로그램 시각화, 시스템 사양, 설계를 문서화
시스템 구성 클래스들과 클래스들 사이의 관계를 그림으로 표현
<UML 기반의 클래스 표기법>
Car // 클래스 이름 |
- name - speed // 변수 |
- setName() - setSpeed() - getSpeed() // 메서드 |
2. 객체 생성
자바의 변수
- 기본형 변수
- 참조형 변수 - 배열 객체나 일반 클래스의 객체를 처리할 때 사용
배열 객체 사용
- 객체 참조 변수의 선언 -
int[] scoreList;
- 객체 생성 및 주소값 할당 -
scoreList = new int[5];
객체 생성
특정 클래스 유형의 객체 참조 변수 선언
- 클래스이름 객체참조변수이름; =>
Car Yellow;
- 객체 생성: 객체참조변수이름 = new 클래스 이름(); =>
Yello new Car();
- 객체가 사용할 메모리 영역을 할당하는 과정 => 예약어
new
- 생성된 객체에 대한 참조 값 (일종의 메모리 주소)이 선언된 객체 참조 변수에 할당
Car Yellow = new Car();
class Car {
String name;
int speed;
}
public class CarTest2 {
public static void main(String[] args) {
Car Yellow = new Car(); // Car 유형의 Yellow 변수를 선언하고
// Car 클래스로부터 객체를 생성하여 주소 값을 할당함
Yellow.name = "Lighting Yellow"; // String type의 참조형 변수로, 문자열 객체의 주소값 저장됨
Yellow.speed = 3000; // 기본형 변수
System.out.println(Yellow.name + " : " + Yellow.speed); // Lighting Yellow : 3000
// 하나의 클래스로부터 여러 개의 객체 생성 가능
Car red = new Car();
red.name = "Sally Red";
red.speed = 200;
System.out.println(red.name + " : " + red.speed); // Sally Red : 200
}
}
멤버 변수의 선언
- [modifier] 데이터타입 변수이름;
- modifier에서 변수에 대한 접근 권한, 활용 방법 제어
- modifier 미지정 시 같은 패키지 내의 클래스에서만 접근 가능한 객체 변수
전역 (Global) 변수 | 지역 (Local) 변수 |
- 클래스 선언부 밑에 선언된 변수로 멤버 변수라고 칭함 - 여러 메서드에서 공통으로 사용 가능 - 객체가 가질 수 있는 속성을 나타내는데 사용됨 |
- 메서드 선언부 밑에 선언된 변수 - 해당 변수가 선언된 메서드 내에서만 사용 가능 |
<멤버 변수에 사용되는 Modifier>
접근 제한자 (Accees Modifier)
- 접근 제한자로 정보 은닉을 구현할 수 있다.
접근 제한자와 정보 은닉의 관계
class Car {
private int serialNumber; // 외부 클래스 접근 불가
protected String name; // 동일 패키지 접근 가능
int speed; // 동일 패키지, 하위 클래스 접근 가능
public int getSerialNumber(int managerId) {
if (managerId == 12345) {
return serialNumber;
}
return 0;
}
public void setSerialNumber(int serialNumber) {
this.serialNumber = serialNumber;
}
}
public class Test {
public static void main(String[] args) {
Car Yellow = new Car();
Yellow.name = "Lighting Yellow"; // protected => 동일 패키지/ 하위 클래스 접근 가능
Yellow.speed = 3000; // default => 동일 패키지 접근 가능
Yellow.setSerialNumber(4929); // private => 외부 클래스 접근 불가능
// setserialNumber() 메서드로 값 설정
System.out.println(Yellow.name + " : " + Yellow.speed); // Lighting Yellow : 3000
System.out.println("Car No : " + Yellow.getSerialNumber(12345)); // Car No : 4929
}
}
2. 멤버 메서드
1. 멤버 변수
메서드 (Method) 정의하기
메서드 구성요소
- 반환형 (Return_type) : 기본형, 참조형 모두 올 수 있다. 아무것도 리턴하지 않으면 void로 선언
- 메서드명 : 식별자(Identifier)의 규칙에 따른다.
- 매개변수(Parameter) : 메소드 수행 시에 전달되는 인자의 타입과 변수명
- 접근 제한자 (Access Modifier) : 생략 가능
// 메서드 선언
public int sum(int num1, int num2) {
// (Parameter 매개 변수)
}
// 메서드 호출
sum(4, 7); // (Argument 인자)
메서드 Modifier
public class MethodTest {
public static void main(String[] args) {
int[] enScore = {55, 70, 45, 90, 100, 90, 95};
System.out.println("영어 평균 : " + getAvgScore(enScore));
int[] korScore = {93, 55, 87, 80, 100, 95, 65};
System.out.println("국어 평균 : " + getAvgScore(korScore));
}
private static double getAvgScore(int[] scoreList) {
int sum = 0;
double avgScore = 0.0;
for (int i = 0; i < scoreList.length; i++) {
sum = sum + scoreList[i];
}
avgScore = (double)sum/scoreList.length;
return avgScore;
}
// 영어 평균 : 77.85714285714286
// 국어 평균 : 82.14285714285714
}
2. 메서드
메서드 종류
- 리턴값X, 매개변수X
- 리턴값X, 매개변수O
- 리턴값O, 매개변수O
메서드의 자동 구현
- 멤버 변수들은 대부분 private로 선언, 외부에서는 숨겨진 형태로 만듦
- public 메서드를 통해 접근하도록 클래스를 구현함
- Getter / Setter 메서드
- 이는 정보 은닉의 기본
- 이클립스는 private 변수에 대한 public Getter, Setter 메서드를 자동으로 구현할 수 있게 해준다.
- <Alt> + <Shift> + <S> => Getter, Setter, toString() 메서드 자동 생성하기
// Employee.java
public class Employee {
// private String name;
String name; // 이름
int number; // 사번
int age; // 나이
String title; // 직함
String dept; // 근무 부서
String grade; // 인사고과 또는 등급
// <Alt> + <Shift> + <S> => Getter, Setter, toString() 메서드 자동 생성하기
@Override
public String toString() {
return "Employee [name=" + name + ", number=" + number + ", age=" + age + ", title=" + title + ", dept=" + dept + ", grade=" + grade + "]";
}
// Getter and Setters ..
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// EmployeeTest.java
public class EmployeeTest {
public static void main(String[] args) {
Employee kim = new Employee();
kim.name = "김재준";
kim.number = 12345;
kim.age = 32;
kim.title = "영업과장";
kim.dept = "영업부";
kim.grade = "A+";
System.out.println("직원의 정보1 : " + kim.toString());
System.out.println("직원의 정보2 : " + kim); // toString() 자동 호출
// 직원의 정보1 : Employee [name=김재준, number=12345, age=32, title=영업과장, dept=영업부, grade=A+]
// 직원의 정보2 : Employee [name=김재준, number=12345, age=32, title=영업과장, dept=영업부, grade=A+]
}
}
출처 - swexpertacademy.com/
'Java > Java Basic' 카테고리의 다른 글
[Java] 2-03 - 생성자와 this (0) | 2021.01.09 |
---|---|
[Java] 2-03 - 자바 Modifier : static, final, abstract, 인스턴스 변수, 클래스 변수, 상수, 추상 메소드와 추상 클래스 (0) | 2021.01.09 |
[Java] 2-01 - 객체지향 핵심 개념 (0) | 2021.01.09 |
[Java] 04 - 자바 제어문 (0) | 2021.01.09 |
[Java] 03 - 자바 배열, 명령형 매개변수 (0) | 2021.01.08 |
댓글