My footsteps

code 실습 / 2️⃣0️⃣ 본문

국비수업/CODE

code 실습 / 2️⃣0️⃣

밀김 2023. 3. 15. 14:17
728x90

 
 
 
 
 

 
 
 
 
 

✏️ [날짜 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이 스택에 쌓이고..출력하고 반복)

 

 

 

 

 

 

 

728x90

'국비수업 > 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