728x90
This
// appendModelName을 추가하는 메소드
void appendModelName(String modelName) {
// 여기a로 전달되는 modelName은 원래 갖고있던 인스턴스 modelName에 추가되는 것
// mondelName 업데이트
//modelName += modelName;
// 왜 까망이만 출력됐을까?
// 앞에있는 modelName은 "클래스 인스턴스"로 만들어진 modelName
// 뒤에있는 modelName은 전달값(String modelName)에서 받은 modelName
// 최신형+최신형
// 전달받은 파라미터값을 한 번 더 업데이트하고 끝나게 되는 것일 뿐이다.
// 파라미터가 아니고 인스턴스의 modelName을 명시하고 싶으면 this.을 붙여준다
// this.을 붙여주면 클래스의 인스턴스 변수에 직접 바로 접근할 수 있다.
// modelName이라는 똑같은 이름이 들어와도 this를 붙여버리면
// 클래스 인스턴스 변수 modelName이고, this 없는건 파라미터로 전달받은 modelName이다
this.modelName += modelName;
//클래스 인스턴스변수 모델네임 += 파라미터로 전달받은 모델네임
// 그냥 파라미터로 전달받은 값 이름이 modelName아니라 다른 것일 경우
// ex) modelName += s;
// this 없이 사용해도 상관없음
// this는 인스턴스 변수하고 전달받은 파라미터 변수의 이름이 똑같을 때 사용한다.
}
}
package chap_07;
public class _07_This {
public static void main(String[] args) {
BlackBox b1 = new BlackBox();
b1.modelName = "까망이"; // 까망이(최신형)으로 돋보이게 해주기.
b1.appendModelName("(최신형)"); // appendModelName 메서드를 만들어야 한다 - BlackBox로 이동.
// 업데이트 된 modelName 출력해보기
System.out.println(b1.modelName); // 까망이. 최신형이 뜨지 않는다. this를 붙여주니까 뜸.
}
}
생성자
//08] 시리얼 넘버
int serialNumber; // 시리얼 넘버가 됨
// 값을 정의해주기 위해서 static 형태로된 int 변수를 만들어서 값을 1씩 더해주는 형태로 만들어보기
static int counter = 0; // 시리얼 번호를 생성해주는 역할을 함 // (처음엔 0이었다가 ++연산을 통해서 값을 증가)
// 이 값을 생성자 내에서 해보기(바로 아래)
// 08] 생성자(Constructor) 만들어주기: 클래스명과 똑같이 적어주면 된다.
BlackBox() {
System.out.println("기본 생성자 호출");
this.serialNumber = ++counter;
// counter 가 0인데 ++ 해갖고 1이 serialNumber에 들어갈거고,
// 새로운 객체가 만들어질 떄는 counter 값은 인스턴스 변수가 아니기 때문에 1로 업데이트가 된 상태이고,
// 1이었던 값이 2가 될거고, 또 새로운 객체를 만들면 3이되고, 그런식으로 업데이트가 된다.
System.out.println("새로운 시리얼 넘버를 발급받았습니다: " + this.serialNumber);
} // 이 생성자를 호출할 떄는 시리얼 넘버를 자동으로 발급받게됨.
// 근데 바로 하단의 생성자를 받게되는 b2 객체의 경우에는 발급받지 못하게 되는 셈.
// b2객체가 발급받게 하려면 어떻게 해야될까..? => [1]
// 소괄호에다가 인스턴스 변수 4가지를 넣어보기
// 일일이 인스턴스 변수 만들지 않고 BlackBox 생성자 만들어보기
BlackBox(String modelName, String resolution, int price, String color){
// [1] 여기에 this를 쓰면 b2도 발급받을 수 있게 된다 (아래의 예시)
this(); // 기본 생성자 호출
// [1] 이 this는 기본생성자를 바로 접근할 수 있게 해갖고,(ctrl+마우스 갖다대보면 확인 가능)
// 그 생성자의 동작을 그대로 수행하고 나서, 아래쪽의 동작을 하게 만듦.
// 결론: this 에다가 아무것도 넣지 않으면 아무 파라미터 없는 것이 호출되는 것. BlackBox() 같은거
System.out.println("사용자 생성자 호출");
this.modelName = modelName;
this.resolution = resolution;
this.price = price;
this.color = color;
}
package chap_07;
public class _08_Constructor {
public static void main(String[] args) {
// 생성자: 객체가 만들어질 떄 자동으로 호출하는 메소드
BlackBox b1 = new BlackBox();
// 객체 만들어주고 BlackBox 클래스에 들어가서 생성자 만들어주기
b1.modelName = "까망이";
b1.resolution = "FHD";
b1.price = 200000;
b1.color = "블랙";
System.out.println(b1.modelName);
System.out.println(b1.serialNumber);
System.out.println("--------------------------");
// 아까 BlackBox에서 만든 생성자 호출하기
// 소괄호 속에다가 BlackBox 클래스에서 정의했던 파라미터들을 순서대로 넣어준다
// b2 객체는 b1 과 달리, 소괄호안에 모든 값들을 정의해줬기 떄문에 따로 b1.modelName과 같은 작업이 필요없다
BlackBox b2 = new BlackBox("하양이", "UHD", 30000, "화이트");
//값들이 정말 잘 들어갔는지 확인상 출력해보기
System.out.println(b2.modelName);
System.out.println(b2.serialNumber);
// 기본 생성자 호출
// 사용자 생성자 호출
// 하양이
// UHD
// 30000
// 화이트
// 블랙박스에 시리얼 번호 *고유번호 넣기
//시리얼 넘버 // (처음엔 0이었다가 ++연산을 통해서 값을 증가)
}
}
Getter와 Setter
// 09) Getter & Setter
// Getter : 값을 갖고오는 메소드
// Setter : 값을 설정하는 메소드
// modelName을 갖고오는 메소드를 생성해보기
String getModelName() {
return modelName;
}
// 앞에 get으로 시작하고있으니 getter가 된다
// setter는 앞에 set으로 시작된다.
// 파라미터로 String modelName을 전달받음
void setModelName(String modelName) {
this.modelName = modelName;
}
// 해상도에 대한 getter setter 생성하기
// resolution getter 생성하기
// getter 에서 조건을 줄 수 있음
String getResolution() {
if (resolution == null || resolution.isEmpty()) {
// resolution 이라는 값이 null이면(아예없는 것), 또는 isEmpty() - 빈문자열(비어있을 떄)일 때는 true
return "판매자에게 문의해보세요";
}
return resolution;
}
// resolution setter 생성하기
void setResolution(String resolution) {
this.resolution = resolution;
}
// price 생성하기 (getter / setter)
int getPrice() {
return price;
}
void setPrice(int price) { // 가격같은 경우 최소금액 설정해주기
if (price < 100000) { // 100000 보다 작으면 100000으로 함
this.price = 100000;
} else {
this.price = price; // 100000보다 크면 그 값을 여기서 집어넣음
}
}
String getColor() {
return color;
}
void setColor(String color) {
this.color = color;
}
}
1. getter 에 retrun 쓴 이유
2. setter 에는 왜 this를 쓴 건지
3. return 2 번 사용한 이유, 활용법
package chap_07;
public class _09_GetterSetter {
public static void main(String[] args) {
// BlackBox의 생성자 부분을 주석처리
// BlackBox 객체 만들기
BlackBox b1 = new BlackBox();
b1.modelName ="까망이";
// b1.resolution = "FHD"; 실수로 해상도 부분을 넣지 않음
b1.price = 20000;
b1.color = "블랙";
// 블랙박스 가격 할인
b1.price = - 5000;
System.out.println("가격 : " + b1.price + "원");
// 고객문의 (블랙박스의 해상도를 여쭤봤다)
System.out.println("해상도: " + b1.resolution); // null 출력됨 ( 값이 비어있음 ) - 올바른 답변을 하지 못함
//게터 세터 만든 후 객체 다시 생성 : 오류를 줄일 수 있다
BlackBox b2 = new BlackBox();
//modelName 바로 넣는게 아니고 set을 써준다
b2.setModelName("하양이");
b2.setPrice(-5000);
b2.setColor("화이트");
System.out.println("가격 : " + b2.getPrice() + "원");
System.out.println("해상도 : " + b2.getResolution());
}
}
1. getter setter 사용법
접근제어자 (전반부)
package chap_07;
public class BlackBoxRefurbish {
String modelName; // 모델명
String resolution; // 해상도
private int price; // 가격
// 가격에 private을 붙여주게 되면 해당 클래스 내에서만, BlackBoxRefurbish 내에서만 접근이 가능
// AccessModifier에는 price 부분이 빨갛게 뜨게 된다 (사용이 불가능해짐) getprice와 setprice만을 통해 접근 가능.
String color; // 색상
// Getter & Setter 만들어주기 = alt + shift + s
public String getModelName() {
return modelName;
}
public void setModelName(String modelName) {
this.modelName = modelName;
}
public String getResolution() { //여기 return 부분 지워버리고 넣어줌
if (resolution == null || resolution.isEmpty()) {
return "판매자에게 문의해보세요";
}
return resolution;
}
public void setResolution(String resolution) {
this.resolution = resolution;
}
public int getPrice() {
return price;
}
public void setPrice(int price) { //여기 this 부분 지워버리고 넣어줌
if (price < 100000) {
this.price = 100000;
} else {
this.price = price;
}
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
// AccessModifier에 사용해보기
package chap_07;
public class _10_AccessModifier {
public static void main(String[] args) {
// 접근 제어자
// private : 해당 클래스 내에서만 접근 가능
// public : 모든 클래스에서 접근 가능
// default: (아무것도 적지 않았을 때) 같은 패키지 내에서만 접근 가능
// protected : 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스 접근 가능
BlackBoxRefurbish b1 = new BlackBoxRefurbish();
b1.modelName ="까망이";
b1.setPrice(20000);
b1.color = "블랙";
// 블랙박스 가격 할인
b1.setPrice(-5000);
System.out.println("가격 : " + b1.getPrice() + "원");
// 고객문의 (블랙박스의 해상도를 여쭤봤다)
System.out.println("해상도: " + b1.resolution); // null 출력됨 ( 값이 비어있음 ) - 올바른 답변을 하지 못함
BlackBoxRefurbish b2 = new BlackBoxRefurbish();
b2.setModelName("하양이");
b2.setPrice(-5000);
b2.setColor("화이트");
System.out.println("가격 : " + b2.getPrice() + "원");
System.out.println("해상도 : " + b2.getResolution());
}
}
접근제어자 ( 후반부)
package chap_07;
public class BlackBoxRefurbish {
public String modelName; // 모델명
String resolution; // 해상도 - default로 두기 = 아무것도 앞에 안 적어두면 default.
private int price; // 가격
protected String color; // 색상
// Getter & Setter 만들어주기 = alt + shift + s
public String getModelName() {
return modelName;
}
public void setModelName(String modelName) {
this.modelName = modelName;
}
public String getResolution() { //여기 return 부분 지워버리고 넣어줌
if (resolution == null || resolution.isEmpty()) {
return "판매자에게 문의해보세요";
}
return resolution;
}
public void setResolution(String resolution) {
this.resolution = resolution;
}
public int getPrice() {
return price;
}
public void setPrice(int price) { //여기 this 부분 지워버리고 넣어줌
if (price < 100000) {
this.price = 100000;
} else {
this.price = price;
}
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
// AccessModifier에 사용해보기
package chap_07;
public class _10_AccessModifier {
public static void main(String[] args) {
// 캡슐화 (Encapsulation)
// 정보은닉 (Information hiding)
// 접근 제어자
// private : 해당 클래스 내에서만 접근 가능
// public : 모든 클래스에서 접근 가능
// default: (아무것도 적지 않았을 때) 같은 패키지 내에서만 접근 가능
// protected : 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스 접근 가능
BlackBoxRefurbish b1 = new BlackBoxRefurbish();
b1.modelName ="까망이";
b1.setPrice(20000);
b1.color = "블랙";
// 블랙박스 가격 할인
b1.setPrice(-5000);
System.out.println("가격 : " + b1.getPrice() + "원");
// 고객문의 (블랙박스의 해상도를 여쭤봤다)
System.out.println("해상도: " + b1.resolution); // null 출력됨 ( 값이 비어있음 ) - 올바른 답변을 하지 못함
BlackBoxRefurbish b2 = new BlackBoxRefurbish();
b2.setModelName("하양이");
b2.setPrice(-5000);
b2.setColor("화이트");
System.out.println("가격 : " + b2.getPrice() + "원");
System.out.println("해상도 : " + b2.getResolution());
}
}
package chap_08;
import chap_07.BlackBoxRefurbish; // chap_07에 있는 BlackBoxRefurbish를 쓰겠다는 의미
public class _00_AccessModifier {
public static void main(String[] args) {
// 객체 생성
BlackBoxRefurbish b1 = new BlackBoxRefurbish();
b1.modelName = "까망이"; // public
// b1.resolution="FHD"; // default - 다른 패키지이므로 접근 불가.
// b1.price = 200000; // class - 해당 클래스 내에서만 접근가능하므로 사용 불가
// b1.color = "블랙" // protected - 패키지가 달라져버렸고, 자식클래스도 아니기 떄문에 접근불가
}
}
728x90
'> 프로그래밍 언어 > JAVA' 카테고리의 다른 글
[나도코딩] 자바기본편 - 섹션 8 (3) (0) | 2023.04.16 |
---|---|
[나도코딩] 자바기본편 - 섹션 8 (1) (4) | 2023.04.12 |
[나도코딩] 자바기본편 - 섹션 7 (0) | 2023.04.12 |
[나도코딩] 자바기본편 - 섹션 1, 2 (0) | 2023.04.06 |
[그림으로 배우는 자바, part2]: 03 레퍼런스와 스태틱 (0) | 2023.02.27 |