이번에는 Time클래스를 통해 객체지향 개념 1 - 클래스와 객체에 대해 더 알아보겠습니다.
이론은 아래 포스팅을 확인해주세요.
2020/10/07 - [§개발자 되기 프로젝트§/java 이론] - [자바 java] 객체지향개념1 - 클래스와 객체, 클래스 접근 제어자, 메서드 구성
이 포스팅은 아래의 내용을 포함하고 있습니다.
1. private접근 제어자
2. getter, setter
3. 매개변수가 있는 생성자
4. toString오버라이딩
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
|
public class Time {
//접근 제어자 (Access Modifier)의 종류
//private : 같은 클래스 내에서만 접근 가능함.
//protected : 같은 패키지, 자손 클래스에서만 접근 가능함.
//default : 같은 패키지에서만 접근 가능함.
//public: 누구나 다 접근 가능함.
//멤버 변수(접근제어자 private외부로부터 값을 숨김)
private int hour;
private int minute;
private int second;
//기본 생성자 - 코드로 추가를 해주지 아니하면, 컴파일러가 알아서 추가를 해준다.
public Time() {
System.out.println("기본 생성자 호출");
}
//매개변수가 있는 생성자- 멤버변수의 초기화 메서드이다.
public Time(int hour, int minute, int second) {
System.out.println("매개 변수가 있는 생성자 호출");
this.hour = hour;
this.minute = minute;
this.second = second;
}
//getter메서드: 멤버변수의 값을 읽어가게끔 해주는 메서드
//setter메서드: 멤버변수의 값을 저장하거나 수정하거나 해주는 메서드
public int getHour() {
return hour;
}
public void setHour(int hour) {
if (hour<0 || hour>23) {
System.out.println("시간을 잘못 입력하셨습니다.");
return;
}
this.hour = hour;
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
if (minute<0 || minute>59) {
System.out.println("분을 잘못 입력하셨습니다.");
return;
}
this.minute = minute;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
if (second<0 || second>59) {
System.out.println("초를 잘못 입력하셨습니다.");
return;
}
this.second = second;
}
@Override
public String toString() {
return this.getHour() + "시 " + this.getMinute() + "분 " + this.getSecond() + "초";
}
}
|
cs |
Time클래스에 멤버변수는 이렇게 선언이 되었습니다.
초기화를 해주지않았으니 당연히 int형의 기본값인 0으로 초기화되어있습니다.
접근 제어자가 private입니다.
그러면 같은 클래스 즉, 이 Time클래스에서만 접근을 할 수 있습니다.
실행 클래스를 하나 더 만들어서 거기서 이 멤버 변수를 사용할 수 없다는 말입니다.
그렇다면 이 멤버에 접근을 하기 위해서는
getter와 setter가 필요합니다.
이클립스에
source에서 Generate Getters and Setters에 들어가시고
select all을 해주시면 getter와 setter둘다 선택이 되구요
따로 선택하고 싶다면 밑에 select getters나 setters를 해주면 됩니다.
getter는 값을 다른 클래스에서 읽는 것,.
setter는 값을 다른 클래스에서 넣는 것이라고 이해하시면 되겠습니다.
이것도 메서드니까 마지막의 setSecond 메서드를 살펴보시면
public 접근제어자(다른 클래스에서도 사용가능)
void (리턴 타입 없음)
setSecond(메서드명)
(int second) 매개변수가 int
입니다.'
그리고 메서드 구현부를 보시면
second<0 이거나 second>59이면 뭐시기를 출력한다 하는데
여기서 second는 매개변수로 들어온 second입니다.
우리가 Time 클래스에서 설정한 멤버변수second가 아니라는 말씀입니다.
그리고 맨 밑에 this.second = second;
라고 되어있습니다.
this.second가 바로 멤버변수 second입니다.
이렇게 지역변수와 멤버변수를 구분 하기 위해서 this를 사용합니다.
이 부분은 나중에 또 다루어보겠습니다.
그래서 매개변수로 들어온 second를 멤버변수인 second에 대입하겠다는 말입니다.
toString은 이렇게 구현을 했구요
값을 읽는 것은 getter라고 했으니 getter로 이렇게 리턴을 했습니다.
getter을 보시면 이렇게 멤버변수를 리턴하고 있으니까요
여기서는 this가 붙어도 되고 안붙어도 멤버변수를 가리킵니다.
여기는 이름이 같은 지역변수가 없으니까요.
마지막으로 생성자부분인데요.
이론 포스팅에서도 말했듯이
클래스에는 속성(변수), 기능(메서드), 생성자가 있는데
다른건 몰라도 생성자는 꼭 있어야합니다.
이게 있어야 인스턴스가 생성할 수 있는데 만약에 생성자를 아무것도 안만들었으면 컴파일러가 알아서 기본생성자를 추가해줍니다.
기본생성자는 public Time(){} 이렇게 클래스명이랑 똑같은 이름을 가졌습니다.
그리고 밑에 코드처럼 매개변수가 있는 생성자도 만들 수 있습니다.
생성할때 매개변수로 들어온 값으로 멤버변수를 초기화해놓고 만든다는 말입니다.
그럼 실행클래스로 가보겠습니다.
실행클래스입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class TimeEx {
public static void main(String[] args) {
Time t1 = new Time();
Time t2 = new Time(10,55,10);
//setter메서드 이용하여 값 설정
t1.setHour(15);
t1.setMinute(24);
t1.setSecond(33);
System.out.println(t1); //setter메서드로 설정했음
System.out.println(t2); //위에서 설정했음
}
}
|
cs |
t1 은 기본생성자로 인스턴스 호출
t2는 매개변수가 있는 생성자로 인스턴스를 호출합니다.
그럼 t1은 멤버변수들이 다 기본값인 0으로 초기화되겠고
t2는 멤버변수들이 안의 값으로 초기화가 되어있겠습니다.
그리고 밑에서는 t1에서 setter를 이용해 멤버변수에 값을 저장합니다.
여기서 sysout으로 t1과 t2를 출력하면 오버라이딩된 toString메서드가 나오겠죠.
<출력결과>
이렇게 출력이 잘 되고 있습니다.
'JAVA > java 실습' 카테고리의 다른 글
[자바JAVA] java에서 크롬/인터넷창 열기 /eclipse (0) | 2020.12.10 |
---|---|
[자바JAVA]Object클래스 equals() /객체비교하기/ 논리적 동등 (0) | 2020.11.25 |
[자바JAVA] 객체지향1 - 클래스와 객체 . Tv클래스로 알아보는 객체배열, 멤버호출방법, 객체주소변경, 향상된 for문 (0) | 2020.10.07 |
[자바JAVA] 이차원배열 - String 이차원 배열 ( 3차원배열과 같음)로 단어퀴즈 만들기 (0) | 2020.10.06 |
[자바JAVA] 이차원 배열 , 점수 총점 평균을 표처럼 나타내기 (0) | 2020.10.06 |