[2023.09.25] 개발자 교육 6일 차 : 강의-복습, 클래스 구상하기, for 문, 랜덤게임 [구디 아카데미/김승수 강사님]

DaramGee·2023년 9월 25일
0

오늘 정리

클래스를 나눠서 작성? 이식성, 재사용성을 높이고 보다 입체적으로 코딩을 할 수 있다.

for문? n회까지 반복되는 코딩을 간소화 시킬 수 있다.

복습

  • 복습방법
    • 기본 3세트 코드 써보기
    • 각 개념 설명 말로 해보기(초등학생한테 설명하듯이)
    • 전역변수, 지역변수 활용하기(static은 나중에)
    • 클래스 2분할하여 사용하기
    • 파라미터나 리턴타입 자리에 참조형 타입 사용하기 훈련
    • 설명하기
      • 메소드의 파라미터와 리턴타입
      • 메소드를 통해 객체를 주입받기(인스턴스화) → 프레임워크에서 많이 활용됨 → 의존성 주입 → 제어 역전
  • 변수
    • 전역변수 : 초기화 생략 가능, 하나의 클래스를 대표하는 값(인스턴스변수.변수명 호출 가능)
      • 리턴타입이 없어도 전변이면 어떤 메소드에서도 재정의가 가능하다.
    • 지역변수 : 선언만 가능, 초기화 반드시 필요, 외부의 클래스에서는 실행 불가, 재사용성 떨어짐
      • 메소드의 파라미터 자리는 호출될 때 결정된다 “Call by Value”
  • 인스턴스화
    • 메소드와 변수를 모아놓은 것에 불과한 클래스를 사용할 수 있도록 해당 클래스 타입의 객체명을 선언하고 값을 넣어줘서 해당 클래스의 변수나 메소드를 사용 가능한 상태로 만드는 것
    • 선언될 때 좌중괄호, 우중괄호, 세미클론으로 끝남 → ();
  • 코딩의 순서
    • 생각하기 → 말하기(녹음, 끄적이기) → 낱말카드 작성(필요 요소 키워드) → class선언 ㅇ→ 메인메소드가 필요한 클래스인지? → 전변선언(타입, 갯수 결정)

강의 내용

  • 클래스 n개로 나눠서 사용 → 이식성, 재사용성 높이기

    • 각자의 기능을 나눠서 생성
    • 앞으로 데이터와 관련된 클래스는 클래스이름 뒤에 VO( Value Object)를 붙이기로 함.
    • 클래스 쪼개기 -> MVC패턴(개발방법론), 세련된 코드 -> Spring 프레임워크 활용
  • 메소드 오버로딩 & 오버라이딩

    • 자바에서는 같은 이름의 메소드를 중복 선언할 수 있다
    • 메소드 오버로딩 (이름은 같지만 서로 다른 메소드)
      • 반드시 파라미터의 갯수나 타입이 달라야 한다
      • 리턴타입의 유무는 오버로딩과 관계
      • 자바에서 제공되는 대표적 메소드 오버로딩 print
    • 오버라이딩
  • for문

    • for(1-초기화; 2-조건식; 3-증감연산자){}

      package com.step21;
      
      public class Strudent {
      	int html = 0;
      	int css = 0;
      	int java = 0;
      	public static void main(String[] args) {
      //		for문 사용
      //		for(1-초기화; 2-조건식; 3-증감연산자){}
      //		조건식이 true일 때, for문 안의 실행문이 차례대로 실행됨(밖에서 실행 x or 밖에서 실행하여 접근)
      		int i;
      		for(i = 0; i < 3; i = i+1) {  //0 > 1 > 2 
      			Strudent s = new Strudent();
      			System.out.println(s);  //파라미터 안의 s는 참조형타입이기 때문에 주소번지가 출력
      		} //end of for, i가 3이될 때 탈출 
      		System.out.println(i); // 3으로 출력
      	}
      
      }
      package com.step21;
      
      public class Strudent {
      	int html = 0;
      	int css = 0;
      	int java = 0;
      	public static void main(String[] args) {
      //for문 사용x
      		Student s = new Student();
      		s.html = 70;
      		s.css = 80;
      		s.java = 90;
      		System.out.println(s);
      		s = new Student();
      		s.html = 60;
      		s.css = 70;
      		s.java = 80;		
      		System.out.println(s);
      		s = new Student();
      		s.html = 50;
      		s.css = 60;
      		s.java = 70;		
      		System.out.println(s);
      	}
      
      }
  • 랜덤게임 만들기 (실습)

    package com.step3;
    
    import java.util.Random;
    
    public class RandomGame {
    	//선언부
    	//새로 채번된 숫자를 담는 정답을 담는 전역변수
    	int dap = -1; //-1 end of file 찾아도 없다
    	//사용자가 입력하는 숫자는 입력할때마다 바뀌어야하니까 지역변수로 설정
    	//게임 메소드 선언
    	//새 게임을 누를 때 마다 호출되는 메소드
    	//여기서 채번되는 숫자가 정답이므로 노출하지 않는다. - 그래서 나는 전변으로 선언함.
    	public void newGame() {
    		Random r = new Random();
    		//리턴타입이 없어도 전변이면 어떤 메소드에서도 재정의가 가능하다.
    		dap = r.nextInt(10); //답이 결정됨, 종료가 될 때 까지 값이 유지되어야 한다.
    	}
    	//문자로 응답 판정을 내려주는 메소드 선언
    	/***********************************************************************************************************************
    	 * 판정을 내려주는 메소드 구현하기
    	 * @param - user - 사용자가 숫자를 맞추기 위해서 입력하는 값을 담는 변수, 입력할 때 마다 바뀜(지변)
    	 * @return - String - 힌트를 반환한다(예시 : 높여라, 낮춰라, 정답입니다. 축하합니다)
    	 ***********************************************************************************************************************/
    	public String account(int user) {  //user -> 매번 화면에 사용자가 입력하고 엔터를 친 값
    		System.out.println("dap : " + dap + "," + "user : " + user);   //출력해서 확인해보기
    		String hint = null;
    		if(dap == user) {
    			hint = "정답입니다.";
    		}else if(dap > user){
    			hint = "높여라";
    		}else if(dap < user) {
    			hint = "낮춰라";
    		}
    		return hint;		
    	}
    	//메시지 출력
    	public void messagePrint(int user) {                        //호출되면 5가 복사됨 -> call by value
    		System.out.println(account(user));                       //24 -> 5를 쥐고 간다 -> 높여라 출력
    	}
    	
    	public static void main(String[] args) {
    		RandomGame rg = new RandomGame();  //f6
    //		rg.account(5);                                       //높여라가 출력은 이게 아니라
    		rg.newGame();                                      //f5(메소드 안으로 들어감)  
    		//이 메소드가 호출되어야 0~9 사이의 숫자가 채번된다.그래서 채번된 숫자는dap에 담김
    		//아래 메소드 호출 시 파라미터 자리에 5를 넘겨주고, 37번에서 account() 호출될 때 user 값
    		//즉 5가 파라미터로 넘어감. 
    		//24번에서도 user값이 5가 된다. -> 원시형 타입이기 때문에 값이 호출됨.
    		rg.messagePrint(5);                                //f5(메소드 안으로 들어감)
    	}
    }
    /* 두 수의 합, 차이, 곱, 나누기 구하는 예제???
    0~9 사이의 임의의 숫자를 채번하고
    사용자로부터 숫자를 입력받아서       -> 숫자 지변으로 설정
    입력받은 숫자가 더 작으면 힌트를 "높여라" 라고 출력하고
    더 크면 "낮춰라" 라고 힌트를 주어서 
    5번까지만 기회를 제공해서 그 숫자를 맞추는 게임을 작성해보시오
    
    -> 스캐너, if문, for문 필요
    새 게임을 선택했을 때 0~9 사이에 새로운 숫자 채번 필요
    채번한 숫자는 dap이라는 변수에 저장
    그리고 전역변수로 하기
    그 게임을 하는 사람이 사용하는 동안에는 오직 하나의 객체만 사용하게 될 테니까
    */

0개의 댓글