본문 바로가기
학원수업/12월

12/06 국비학원 자바수업 7회차(생성자)

by 코딩마스터^^ 2022. 12. 6.

제어문

프로그램의 실행 흐름을 제어하는 문장을 제어문이라고 한다.

조건문 ,반복문,분기문으로 나뉜다.

 

 

조건문 

조건식을 제시하고 조건식의 결과에 따라 다음 코드의 수행 여부를 결정하는 문장이다.

반드시 true, false의 결과가 나오게 작성한다.

if문swich문이 있다.

 

조건문 충족되면 실행문

조건문에서 가장 중요한 원시형 타입은 boolean타입이다. 

boolean타입통해 제어, 변경을 할 수 있다. 업무의 프로세스 변경가능.

 

JUnit 이란? 테스팅 프레임 워크

 

자바 개발자라면 반드시 알고있어야 하는 테스팅 프레임워크 중 하나입니다.

 

아주 심플하고 직관적인 자바 테스팅 프레임워크로

 

XUnit이라는 이름의 유닛 테스트 프레임워크 중 하나입니다. (자바는 JUnit, C 언어는 CUnit)

 

Intellij를 만든 JetBrain 사에서 조사한 결과 단위 테스트를 하는 개발자는 75%고 그 중 JUnit을 사용하는 개발자는 2019년엔 93%, 2020년엔 83% 라고 하네요. 1년 사이에 10%나 줄었네요.

https://effortguy.tistory.com/112 

 

[Java] JUnit 5 사용법 (1) - JUnit이란? (JUnit 5)

JUnit 이란? 자바 개발자라면 반드시 알고있어야 하는 테스팅 프레임워크 중 하나입니다. 아주 심플하고 직관적인 Kent Beck, Erich Gamma, David Saff, Kris Vasudevan 이 만든 자바 테스팅 프레임워크로 XUnit이

effortguy.tistory.com

테스트를 해준다....

 

swich문

switch문은 if문과 다르게 값에 따라 준비된 구문이 수행되게 하는 구조를 가진 조건 선택문이다.

if문의 조건식과 다르게 값이 무엇인지를 묻는 계산식이나 변수를 제시하여 case문의 값을 비교해서 실행할 문장을 선택 결정한다.

for문 switch문 안에 스코프 { } 를 사용하여 메소드가 아니라도 그 안에서 유지되게 한다.

control + shift + o 

자동으로 imprort문 넣어줌

 

 

생성자

static이 할 일을 생성자가 할수있다.

생성자는 리턴타입이 없다.

클래스 이름과 같다.

 

1. 메소드와 구분할 수 있는 방법은 반환 타입이 없다. --void, int, boolean등등 안됨

2. 파라미터의 갯수가 다르거나 타입이 다르면 같은 이름의 생성자를 여러 개 반복해서 선언할 수 있다.

3. 생성자의 1번 역할은 전역변수의 초기화이다.

4. 디폴트 생성자(파라미터가 한개도 없는 생성자)는 JVM이 생성해주니까 생략할 수 있다.

5. 생성자의 파라미터를 통해서 클래스와의 관계를 설정할 수 있다.

6.활용역량 중요 

7. 초기화를 하지않은 클래스 선언은 생성자를 호출하지 않는다.

대입 연산자는 new 클래스이름() 가 있는 경우만 생성자가 호출되는 것이다. 

8. 사용자로부터 입력 받는 장치를 생성자의 파라미터에 적어 준다. 생성자도 파라미터를 가질 수 있다.

9. 인스턴스화를 하면 생성자가 호출된다.

 

만약 클래스에 생성자가 하나도 없다면 컴파일러는 자동으로 위와같은 디폴트 생성자를 추가한다. 하지만 사용자가 작성한 생성자가 하나라도 구현되어 있다면 컴파일러는 디폴트 생성자를 추가하지 않는다.

이러한 이유로 위에서 살펴본 HouseDog 클래스에 name을 입력으로 받는 생성자를 만든 후에 new HouseDog() 는 사용할 수 없다. 왜냐하면 HouseDog 클래스에 이미 생성자를 만들었기 때문에 컴파일러는 디폴트 생성자를 자동으로 추가하지 않기 때문이다. 만약 new HouseDog()도 가능하게 하려면 디폴트 생성자를 수동으로 추가해야 한다.
https://wikidocs.net/281

 

05-06 생성자

이번에는 클래스의 생성자(Constructor)에 대해서 알아보자. [TOC] ## 생성자(Constructor) 다음 클래스들은 이전 챕터들을 진행하며 만든 클래스들이…

wikidocs.net

 

자바에서는 메소드 이름의 중복을 허용한다.

단, 반드시 파라미터의 갯수가 다르거나 타입이 달라야만 한다.

 

문제4

package dev_java.Homework;

/* 문제 4 

0부터 9까지의 임의의 수를 채번하고 그 숫자를 맞추는 게임을 구현하시오. 기회는 단 5번 그후에는 빠져나오게.

java.util.Random

Random r =new Random();

힌트는 낮춰라 높여라

맞으면 축하합니다. 끝
 */
import java.util.Scanner;
import java.util.Random;

public class Quiz4_P {

  public static void main(String[] args) {
    //Random하게 채번하는 메소드를 제공하는 클래스 선언 및 생성하기
    Random random = new Random();//new다음에 오는 이름의 객체가 로딩-> 생성자 호출도 일어남
    //스캐너 클래스를 사용하면 입력장치로 입력된 정보를 받아올수있다.
    //생성자의 파라미터에 입역 장치에 대한 코드가 필요하다
    //시스템-내가 사용하는 컴터의 장치
    //그 뒤에 변수 인을 붙이면 입력 장치를 나타냄
  
    Scanner scanner = new Scanner(System.in);
    //nextInt메소드는 스캐너 클래스가 소유주이다. 스캐너 클래스 안에있는 애임
    int x = random.nextInt(10);// 0부터 10까지 범위이다 라는 의미
    System.out.println("채번한 숫자는====>" + x);
    int y = -1;
    boolean isOK = true;
    int cnt = 1; 
    //회차를 카운트 해주는 변수 필요하다
    //언제 카운트를 증가 시킬것인가?-힌트를 줄때 증가시킨다.
    while (isOK) {//조건문에 변수만 들어가도 된다.
      System.out.println("0부터 9까지 숫자를 하나 입력하세요.");
      //스캐너 클래스가 소유한 nextInt메소드 호출하기
      //nextInt():int이다
      y = scanner.nextInt();
      System.out.println("사용자가 선택한 값 :" + y);
      //컴터가 채번한 값x과 사용자가 입력한 값y이 같니?
      if(cnt==5){
        System.out.println("5번의 기회를 모두 사용했습니다.");
        System.exit(0);//파ㅣ라미터에 0을 주면 자바가상머신과의 연결고리 끊긴다.-종료-할당 스레드 반환이됨
      }
      if (x == y) {// 맞다- 변수가 가리키는 값이 같은지를 비교하는 것임. 원시형 변수이다.직접접근 방식이다.
        System.out.println("축하합니다.");
        scanner.close();// 사용한 주소번지는 반드시 닫아준다. 위변조 막기위해서. 스캐너 쓰고 해킹 안당하기 위해 닫는다.
        break;
      } else if (x > y) {//컴터가 채번한 숫자보다 크니?
        System.out.println("올리세요.");
      } else if (x < y) {
        System.out.println("내리세요.");
      } else if (y == 10) {
        scanner.close();
        System.exit(0);

      }
    }
  }
}

 

while문

 while(    ){   }

 

 

배열

같은 자료형의 변수 여러개를 하나의 묶음(하나의 주소번지로 접근 가능)으로 만들어 하나의 이름으로 다루는 것을 배열이라고 한다.

코드를 간단히 처리

인스턴스화를 통해서 배열을 생성한다.

자바에서 배열공간은 Heap에 할당-참조영역

배열에 할당된 배열공간의 주소를 저장->배열공간의 주소를 이용하여 인덱스(순서)를 참조하는 방식으로 값들을 처리

클래스급이다=참조형이다.=주소가있다

원시형 배열-new다음 원시형 타입 넣어줌

객체배열-new다음 참조형타입

 

배열의 선언과 생성 

데이터 타입 [ ] 변수 = new 데이터타입 [연속 할당된 변수 갯수];

int com [ ] = new int [3];

 

1차 배열은 

 

 

조건을 나중에 따짐. 딱 한번은 무조건 실행

 

배열은 주소번지를 갖는다.

배열일때는 [ ]를 붙인다 인덱스값???이 안에 들어간다.

인덱스-위치

 

[ ] 안에

크기=>방의 갯수

 

객체배열이 활용도가 더 높다

DeptVO[ ] 

 

주소번지 찍는법

바로 객체를 프린트

System.out.printIn(객체변수);

 

닷연산자.옆에는 소유주가 온다.

소유주=참조형

원시형은 직접 참조방식

int.parseInt는 예외

인스턴스변수

 

선언과 초기화는 분리할 수 있다.

 

개선된 for문

 for(int i : deptnos)

for(자료형 변수명 : 배열명){
	문장
}

 

Math --대문자

static 메소드

Math.random( )

원형타입=double

스태틱하면 인스턴스화 안해도된다.

 

숫자야구게임

숫자 야구게임 규칙은 간단하다.
컴퓨터가 생각한 3자리 숫자를 정확하게 맞추면 되는 게임이다.

참여자가 3자리 숫자를 입력하면, 컴퓨터는 자신이 생각한 숫자와 비교해서
숫자와 자리가 정확하게 일치한 숫자의 개수를 스트라이크(S)로 알려 준다.
숫자는 일치하지만 자리가 일치하지 않는 숫자의 개수는 볼(B) 에 표시해 준다.
그리고 일치하지 않는 숫자의 개수는 아웃(OUT) 에 표시해 준다.

package dev_java.ch02;
//문제! 난수 발생하여 3자리의 서로 다른 숫자로 된 값을 배열에 담기
public class NansuMaker {//2년차 미만은 static쓰지마라. 전역변수로 해서 메소드로 끄집어내라
  
  int com[]=new int[3];//컴터가 채번한 숫자
  int my[]=new int[3];//사용자가 선택한 숫자 
  
  public void ranCom(){
    com[0]=(int)(Math.random()*10);//첫번째는 그냥 채번 간다. 같은 숫자가 있을리 없다.
    do{//조건 먼저 따지지 않고 먼저 채번 그다음 비교
      com[1]=(int)(Math.random()*10);//두번째 자리가 컴터 숫자랑 같니?
    }while(com[0]==com[1]);//같으면 다시 반복해라
    //insert here
    do{
      com[2]=(int)(Math.random()*10);
    }while(com[1]==com[2]||com[0]==com[2]);
    System.out.println(com[0]);
    System.out.println(com[1]);
    System.out.println(com[2]);

  }

  public static void main(String[] args) {
    NansuMaker nansu = new NansuMaker();
    nansu.ranCom();

    
  }
  
}

com[0] 

com[1]

com[2]

각각 다른 숫자가 나와야 한다.

같은게 나오면 do반복

조건 만족 전에 나오려면 break;를 do문 안에 쓴다.

 

셔플문제

 

 

피보나치 수열

1,1,2,3,5,8,13,21,34.....

// 2022년 12월 5일 숙제 피보나치 수열의 규칙을 만족하는 프로그램을 작성하고

// a1에서 a10번째 항까지 출력되도록 해보시오.
 
a3=a1+a2
a4=a2+a3
a5=a2+a3
 
첫번째 항과 두번째 항은 상수처리한다. 왜? 앞에 없으니까....
나머지 a3항부터는 공식에 대입 하겠다.
하나 앞에꺼랑 그 앞에것을 치환해줘야된다.
출력 후 치환
 

야구숫자게임 ui적으로 생각해보기

0~9까지의 버튼

새게임/정답/지우기/종료 버튼 만들기

javax.swing 프레임 워크 사용

 

댓글