My footsteps
code 실습 / 2️⃣0️⃣ 본문
✏️ [날짜 0220 복습]
- do-while문을 이용하여 사용자에게 1부터 10사이의 int값을 받을때만 통과하는 코드 작성하기.
ex)
> 11
입력 범위를 넘었습니다. 1부터 10 사이의 값을 입력해주세요.
> 4
통과!
do {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
if(1<=num && num<=10) {
System.out.printf("통과!",num);
break;
}
else
System.out.println("입력 범위를 넘었습니다. 1부터 10 사이의 값을 입력해주세요.");
}while(true);
- while문과의 차이점은 무엇인지 이해하기
while문은 조건을 만족해야만 실행되고, do-while문은 무조건 한번은 실행 된 뒤에 조건을 살핀다
✏️ ‘캡슐’이란? 설명해보기
구조의 상자
✏️ ‘캡슐화’란? 객체지향적인 캡슐화와 물리적인 캡슐화 비교하여 설명하기
물리적인 캡슐화는 관련이 있는 변수와 함수를 하나의 클래스로 묶어 관리 하는 것이고
객체지향적 캡슐화는 외부에서 쉽게 접근하지 못하도록 은닉하는것이다.
✏️ 캡슐화를 왜 할까요? 캡슐화를 지키지않은 코드와 비교해서 생각해 보아요
예를들어 main메서드에서 변수의 이름을 바꾼다면 그 변수를 썼던 곳을 하나하나 다 바꿔줘야 하는데 캡슐화를 시켜놨다면 수정해야할 부분만 가서 변경하면된다. 코드 제어가 쉬워진다
✏️ 생성자란?
인스턴스가 생성될 때 호출되는 인스턴스 초기화 매서드,아주 특별한 함수
인스턴스란? 클래스의 정의를 통해 만들어진 객체
✏️Java에서 생성자를 어떻게 쓰나요? 설명해주세요
public int num() 매개인자가 없는 기본 생성자 / public int num(int a,int b) 매개인자가 있는 오버로드 생성자
✏️지금까지 class에 생성자가 없었는데 new 키워드가 어떻게 동작했을까요? 설명해주세요
우리 눈에 보이진 않지만 class를 생성하면 자동으로 매개인자가 없는 클래스의 생성자가 생긴다ex) Exam exam = new Exam(); 만들면 class에서 public Exam()이 생김
✏️ 오버로드(오버로딩)란?
[심화] : 오늘말고 추후에 Java에서 오버로드 조건 알아보기
같은 이름의 메소드를 중복해서 정의하는것을 의미하고, 오버로드의 조건은 메소드의 이름이 같아야 하고, 메소드의 매개변수의 개수 또는 타입이 달라야 한다
✏️[혼자하는 실습] 생성자를 이용해여 다음을 진행해보세요
// 뒤의 모든 Cat은 하나의 Cat 클래스 파일로 진행해주세요
// 새로 Cat 클래스 파일 만들지마세요!!
public class Cat {
private int age;
private String color;
private String name;
}
1. cat1을 new 해보기
-> cat1의 age, color, name을 출력하여 값을 확인해보기
public class Cat {
private int age;
private String color;
private String name;
public Cat() {
this.age = age;
this.color = color;
this.name = name;
}
public int age() {
return age;
}
public String color() {
return color;
}
public String name() {
return name;
}
}
public class CatClassRoom {
public static void main(String[] args) {
Cat cat1 = new Cat();
System.out.println(cat1.age());
System.out.println(cat1.color());
System.out.println(cat1.name());
}
}//값:0 null null
정답..
private int age;
private String color;
private String name;
public Cat() { //=cat
this.age = age;
this.color = color;
this.name = name;
//위에 있는 age,color,name을 this로 정의하고 오른쪽 변수명으로 대입한다
}
public int getAge() {
return age;
}
public String getColor() {
return color;
}
public String getName() {
return name;
}
//콘솔 출력을 위해 게터+리턴
public class CatClassRoom {
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(cat.getAge());
System.out.println(cat.getColor());
System.out.println(cat.getName());
}
}//값:0 null null
2. 나이는 1살, 색은 “white”, 이름은 “Meow”를 기본으로 갖는 생성자 만들기
public class Cat {
private int age;
private String color;
private String name;
public Cat() {
// 2.
}
}
-> cat2을 new 해보기
-> cat2의 age, color, name을 출력하여 값을 확인해보기
public class Cat {
private int age;
private String color;
private String name;
public Cat() {
age = 1;
color = "white";
name = "Meow";
}
public int age() {
return age;
}
public String color() {
return color;
}
public String name() {
return name;
}
}
package doyounss;
public class CatClassRoom {
public static void main(String[] args) {
Cat cat2 = new Cat();
System.out.println(cat.age());
System.out.println(cat.color());
System.out.println(cat.name());
}
}//값: 1 white Meow
정답
public class Cat {
private int age;
private String color;
private String name;
public Cat() {
age = 1;
color = "white";
name = "Meow";
}
// public Cat(int age,String color,String name) {
// this.age = age;
// this.color = color;
// this.name = name;
//}
public int getAge() {
return age;
}
public String getColor() {
return color;
}
public String getName() {
return name;
}
public class CatClassRoom {
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(cat.getAge());
System.out.println(cat.getColor());
System.out.println(cat.getName());
}
}//값: 1 white Meow
3. age, color, name을 인자로 받아 사용하는 생성자 만들기
public class Cat {
private int age;
private String color;
private String name;
public Cat() {
// 2.
}
public Cat(...) {
// 3.
}
}
-> cat3를 이 생성자를 이용하여 new 해보기
-> cat3의 age, color, name을 출력하여 값을 확인해보기
public class Cat {
private int age;
private String color;
private String name;
//age, color, name을 인자로 받아 사용하는 생성자 만들기
public Cat(int age,String color,String name) {
this.age = 1;
this.color = "white";
this.name = "Meow";
}
public int age() {
return age;
}
public String color() {
return color;
}
public String name() {
return name;
}
}
public class CatClassRoom {
public static void main(String[] args) {
Cat cat1 = new Cat(1,"white", "Meow");
System.out.println(cat1.age());
System.out.println(cat1.color());
System.out.println(cat1.name());
}
}
정답
public class Cat {
private int age;
private String color;
private String name;
public Cat() {
age = 1;
color = "white";
name = "Meow";
}
public Cat(int age,String color,String name) {
this.age = age;
this.color = color;
this.name = name;
}
public int getAge() {
return age;
}
public String getColor() {
return color;
}
public String getName() {
return name;
}
public class CatClassRoom {
public static void main(String[] args) {
Cat cat = new Cat(1,"white","Meow");
//( )여기에 넣은 매개인자를 직접 넣어준다
System.out.println(cat.getAge());
System.out.println(cat.getName());
System.out.println(cat.getColor());
}
}//1 white Meow
4. age만 인자로 받아 사용하는 생성자 만들기
class Cat {
private int age;
private String color;
private String name;
public Cat() {
// 2
}
public Cat(int age, String color, String name) {
// 3
}
public Cat(int age) {
// 4
}
}
-> cat4를 이 생성자를 이용하여 new 해보기
-> cat4의 age, color, name을 출력하여 값을 확인해보기
-> 이런 생성자들을 ( ??? ) 생성자 라고한다.
오버로드 생성자
public class Cat {
private int age;
private String color;
private String name;
public Cat() {
age = 1;
color = "white";
name = "Meow";
}
//age, color, name을 인자로 받아 사용하는 생성자 만들기
public Cat(int age,String color,String name) {
this.age = 1;
this.color = "white";
this.name = "Meow";
}
//age만 인자로 받아 사용하는 생성자 만들기
public Cat(int age) {
this.age = age;
}
public int age() {
return age;
}
public String color() {
return color;
}
public String name() {
return color;
}
}
public class CatClassRoom {
public static void main(String[] args) {
Cat cat4 = new Cat(1);
System.out.println(cat4.age());
System.out.println(cat4.color());
System.out.println(cat4.name());
}//값 1 null null
}
정답
public class Cat {
private int age;
private String color;
private String name;
public Cat() {
age = 1;
color = "white";
name = "Meow";
}
public Cat(int age,String color,String name) {
this.age = age;
this.color = color;
this.name = name;
}
public Cat(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public String getColor() {
return color;
}
public String getName() {
return name;
}
public class CatClassRoom {
public static void main(String[] args) {
Cat cat = new Cat(100);
//( )여기에 넣은 매개인자를 직접 넣어준다
System.out.println(cat.getAge());
}
}//age만 나오고 나머지는 null값으로 나옴
5. 2에서 만든 생성자를 지우기
class Cat {
private int age;
private String color;
private String name;
public Cat(int age, String color, String name) {
// 3
}
public Cat(int age) {
// 4
}
}
-> 메인 메서드에서 new Cat(); 해보기. 왜 되는지 or 왜 안되는지 설명해보기
The constructor Cat() is undefined: 생성자 Cat()이 정의되지 않았다는 오류 메세지가 뜬다
안되는 이유는 만든 기본 생성자들은 매개변수가 모두 있는데,
new Cat();
여기 안 괄호에, 매개인자가 없어서 오류가 난다.
✏️ 캡슐이란? 캡슐화란? 생성자란? 다시 한번 설명해보기
캡슐이란 어떠한 구조들을 한데 모은 상자이고, 캡슐화란 관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하도록 은닉하는것이다. 그리고 생성자란, 인스턴스(클래스의 정의를 통해 만들어진 객체)가 생성될 때 호출되는 인스턴스 초기화 매서드이다.
<set과 get 활용하기>
public void setAge() {
age++;
}//set은 age를 1증가 시켜주고
public int getAge() {
return age;
}//get은 그 age값을 반환한다
Cat cat1 = new Cat(0, "cheese", "감자");
//객체 cat1이 갖고 있는 int형 나이,String형 색깔,이름에 차례대로 매개인자가 들어간다
cat1.setAge();
//set을 호출해주면서 age++
System.out.println(cat1.getAge()); //결과는 age=1
<set과 get 내가 따로 해본거....>
public class Cat {
private int grade;
public Cat(int grade) { //이 매개인자 넣는 과정을 꼭 해줘야 메인메소드 new Cat(99)에서 에러가 안난다
//에러메세지: The constructor Cat(int) is undefined (생성자 Cat이 정의되지 않았다)
this.grade=grade;
}
public void setGrade() {
grade++;
}
public int getGrade() {
return grade;
}
}
package homeWork;
public class CatMain {
public static void main(String[] args) {
Cat cat = new Cat(99);
cat.setGrade();
System.out.println(cat.getGrade());
}
}
✏️ 스택, 힙, 변수, 참조 변수에 대해 이해하셨습니까
class Cat {
private String name;
public Cat (String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name;
}
}
public class Main {
public static void main(String[] args) {
int x = 10;
int[] y = {2, 3, 4};
Cat cat1 = new Cat("고양이1");
Cat cat2 = new Cat("고양이2");
// 함수 실행
foo(x, y, cat1, cat2);
// 어떤 결과가 출력될 것 같은지 혹은 값이 어떻게 변할지 맞춰보세요
System.out.println("x = " + x);
System.out.println("y = " + y[0]);
System.out.println(“cat1.name = " + cat1.getName());
System.out.println(“cat2.name = " + cat2.getName());
}
public static void foo(int x, int[] y, Cat cat1, Cat cat2) {
x++;
y[0]++;
cat1 = new Cat("이름 바뀐 고양이1");
cat2.setName("이름 바뀐 고양이2");
}
}

- cat2.setName은 Cat객체에 접근해서 객체에 '이름바뀐고양이2'를 세팅해줬기 때문에 이바고2가나오고
cat1.getName()은 함수가 종료되면서 main에서 참조하고 있던 new Cat("고양이1")때문에 고양이1이 나온다.
(함수 호출되고 sysout만나면서 함수는 종료되고 sysout이 차례대로 스택에 실행되고 값 출력해주고 사라지고,다음 sysout이 스택에 쌓이고..출력하고 반복)
'국비수업 > CODE' 카테고리의 다른 글
code 실습 / 2️⃣2️⃣ (0) | 2023.03.20 |
---|---|
code 실습 / 2️⃣1️⃣ (0) | 2023.03.16 |
code 실습 / 1️⃣9️⃣ (0) | 2023.03.14 |
code 실습 / 1️⃣8️⃣ (0) | 2023.03.13 |
code 실습 / 1️⃣7️⃣ (0) | 2023.03.10 |