일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- 패캠챌린지
- R
- SKT
- 알버트
- AI
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 직장인인강
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 직장인자기계발
- 패스트캠퍼스
- albert
- 패스트캠퍼스후기
- Today
- Total
제주 탈출 일지
패스트캠퍼스 챌린지 11일차 본문
벌써 11일차.. 위대하신 패스트캠퍼스께서 설문 늦게 낸거 한번은 봐주신다고 하십니다.
번창하시옵소서,,
10. 접근 제어 지시자(access modifier)와 정보은닉(information hiding)
public, private, protected, default
private는 외부 클래스에서는 접근할 수 없는 접근 제어 지시자.
아무것도 없음) == default는 같은 패키지 내부에서만 접근 가능.
protected : 하위 클래스가 상위 클래스를 접근할 수 있다. + 같은 패키지도 접근 가능
public : 클래스 어디에서든 접근할 수 있다.
private 위주로 수업을 한다.
외부에서 쓸 일이 있는데 접근을 못한다.
get()/ set() 메서드를 제공함.
-> 이클립스에서 Source탭에 getter/setter을 자동으로 만들어주는 기능이 있다.
set메소드에서 invalid한 값을 조정한다. 접근 제한을 통해 어디서 잘못 됬는가를 파악하는 것이 쉬워진다.
set 메소드를 제공하지 않고 get 메소드만 제공하는 경우 read_only 옵션이 된다.
정보를 보호하는 개념으로 보면 된다.
package ch10;
public class Birthday {
private int day;
private int month;
private int year;
private boolean isValid;
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
if ( month < 1 || month > 12) {
isValid = false;
}
isValid = true;
this.month = month;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public void showDate() {
if(isValid) {
System.out.println( year + "년 " + month + "월 " + day + "일 입니다.");
}
else {
System.out.println("");
}
}
}
setMonth에서 isValid 속성을 제어함으로서 유효한 날짜인지를 확인했다. 더 자세하게 확인해야 하지만, 귀찮아서.. ㅎ
setIsValid 메소드는 제공되지 않으나 getIsValid는 제공해줄 수도 있다.
11. 캡슐화(encapsulation)
꼭 필요한 정보와 기능만 외부에 오픈한다.
대부분의 멤버 변수와 메서드를 감추고 외부에 통합된 인터페이스만은 제공하여 일관된 기능을 구현 하게 함
각각의 메서드나 멤버 변수를 접근함으로서 발생하는 오류를 최소화 한다.
package ch11;
public class MakeReport {
StringBuffer buffer = new StringBuffer();
private String line = "=======================================\n";
private String title = " 이름\t 주소\t\t 전화번호 \n";
private void makeHeader() {
buffer.append(line);
buffer.append(title);
buffer.append(line);
}
private void generateBody() {
buffer.append("James \t");
buffer.append("Seoul Korea \t");
buffer.append("010-2222-3333\n");
buffer.append("Tomas \t");
buffer.append("NewYork US \t");
buffer.append("010-7777-0987\n");
}
private void makeFooter() {
buffer.append(line);
}
public String getReport() {
makeHeader();
generateBody();
makeFooter();
return buffer.toString();
}
}
package ch11;
public class TestReport {
public static void main(String[] args) {
MakeReport builder = new MakeReport();
String report = builder.getReport();
System.out.println(report);
}
}
StringBuffer -> 문자열 String을 단순히 더하는 것은 많은 오버헤드를 초래한다. 그를 피하기 위한 하나의 방법
buffer에 buffer.append();로 하나씩 추가해서 그 buffer를 한버네 출력함.
결국 프로그래밍할때 어떤 정보를 공개할 것인가, 어떤 정보를 공개하지 않을 것인가가 중요하다.
예제에서 외부에 제공해주는 메소드는 getReport()가 끝. makeHeader(), generateBody(), makeFooter()와 같은 메소드는 사용자가 알필요가 없기 떄문에 단순히 getReprot()가 호출되면서 자동으로 사용이 된다.
12. 객체 자신을 가리키는 this
this는 인스턴스 자신의 메모리를 가리킴.
new 생성자(); 했을 떄 힙메모리에 생성이 됨.
거기서,
reference value : 그 주소값
refernece variable : 주소값을 가지는 변수
그 변수 자체는 인스턴스의 외부에 해당되는데, 그 변수가 그 인스턴스를 가리키게 되는데
인스턴스 내부에서 자기자신의 주소값을 가지는게 this.
생성자 안에서 다른 생성자를 호출하는 경우가 있음.
자신의 주소(참조값)을 반환 할때도 사용한다.
스택의 잡히는 단위 - fragment,
this로 다른 생성자를 호출 할때, this 문 이전에 다른 statement를 사용할 수 없다.(this가 끝나야 생성자가 끝나고 초기화가 끝난 상태이기 떄문)
package ch12;
public class Person {
String name;
int age;
public Person() {
//int num = 10; 여기서 코드는 동작하지 않는다.
this("no name", 1);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void showPerson() {
System.out.println(name + ", " + age);
}
public Person getPerson() {
return this;
}
public static void main(String[] args) {
Person person = new Person();
person.showPerson();
System.out.println(person);
Person person2 = person.getPerson();
System.out.println(person2); // person과 동일.
}
}
프로그램의 스택이나 힙에서의 동작은 잘 살펴보고 넘어가는 것이 좋을것 같다.
그럼 안녕.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'패스트캠퍼스 챌린지!' 카테고리의 다른 글
패스트캠퍼스 챌린지 13일차 (0) | 2021.09.18 |
---|---|
패스트캠퍼스 챌린지 12일차 (0) | 2021.09.17 |
패스트캠퍼스 챌린지 10일차 (0) | 2021.09.15 |
패스트캠퍼스 챌린지 9일차 (0) | 2021.09.14 |
패스트캠퍼스 챌린지 8일차 (0) | 2021.09.13 |