학원 17일차 - Java

·2021년 4월 20일
0
post-thumbnail

2021.04.20

용어

  • 형변환

    • 암시적 형변환, 명시적 형변환
    • 자동 타입 변환, 강제 타입 변환
  • 변수

    • 객체 변수, 인스턴스 변수, (멤버 변수)
    • 정적 변수, static 변수, (클래스 변수)
  • Object

  • Instance : 메모리에 실체화된 객체(Object)다.

  • 메소드(Method), 함수(Function), 프로시저(Procedure), 서브루틴(SubRoutine), 행동(Behavior)..
  • 클래스 멤버 변수(객체, 정적) == 특성(Property) == 속성(Attribute) == 필드(Field)

Constructor, 생성자

  • 특수한 목적을 가지는 메소드
  • 객체를 초기화하는 역할(객체 멤버 변수를 초기화 or 기타 초기화 작업)

기본 생성자

  • 인자 값이 없는 생성자
  • 기본 생성자는 개발자가 만들지 않으면 자바가 자동으로 만든다.
  • 인자값이 있는 생성자를 개발자가 만들면 기본 생성자를 더이상 자동으로 만들어지지 않는다.
A. 기본생성자
public class Ex40_Constructor {

    public static void main(String[] args) {
        
		//클래스명 변수 = 객체생성연산자 생성자();
		//1. new       -> 객체 생성 -> 모든 변수는 null
		//2. Person()  ->  생성자를 안만들면 자동으로 생성해줌 -> null, 0 (초기셋팅)
		//3. Persin p  -> 참조변수 p 
		//4. =         -> 주소값 복사
		Person p = new Person();
        
        //초기화를 입력한 것을 주석 처리해도 null, 0이 출력된 이유? -> 기본 생성자.
        //객체 초기화(Setter)
        //p.setName("익명"); 
		//p.setAge(-1);
		System.out.println(p.getName());
		System.out.println(p.getAge());

    }//main
}

class Person {
    //멤버 변수
    private String name;
    private int age;

    //기본생성자
	// - 인자값이 없는 생성자
	// - 기본 생성자는 개발자가 만들지 않으면 자바가 자동으로 만든다.
	// - 인자값이 있는 생성자를 개발자가 만들면 기본 생성자를 더이상 자동으로 만들어지지 않는다.
	public Person() {
		
		//멤버 초기화 기본값
		//1. 정소 -> 0
		//2. 실수 -> 0.0
		//3. 문자 ->\0
		//4. 논리 -> false
		//5. 참조 -> null
	
		this.name = null;
		this.age = 0;
	}
    
    
    //Getter, Setter
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

B. 생성자

public class Ex40_Constructor {

    public static void main(String[] args) {
        
        //Person 객체를 100개 생성 -> "익명" , -1
        Person p = new Person();
        //p.setName("익명");
		//p.setAge(-1);
        
        System.out.println(p.getName()); 
		System.out.println(p.getAge());
       
		Person p2 = new Person();
		
		//객체 초기화(Setter) -> 현실: 수정
		//p2.setName("익명");
		//p2.setAge(-1);
		
		System.out.println(p2.getName());
		System.out.println(p2.getAge());

    }//main
}

class Person {
    //멤버 변수
    private String name;
    private int age;
    
    //생성자
	// - 메서드
	// 1. 메소드명이 클래스명과 동일한다.
	// 2. 반환형을 명시하지 않는다. > 반환값을 돌려주는 목적의 메소드가 아니다. 
	// 3. 멤버 초기화를 구현한다.
//    	public Person() {
//		this.name = "아무개";
//		this.age = 100;
//	}
    
	public Person() {
		this.name = "익명";
		this.age = -1;
	}
    
    
    //Getter, Setter
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

C. 생성자 오버로딩(= 메소드 오버로딩)

public class Ex40_Constructor {

    public static void main(String[] args) {
        
        //Person 객체를 100개 생성 -> "익명" , -1
        Person p = new Person();
        
        System.out.println(p.getName()); 
		System.out.println(p.getAge());
       
		Person p2 = new Person();
		
		System.out.println(p2.getName());
		System.out.println(p2.getAge());
        
        
        //p, p2 : 익명, -1
		//p3 : 홍길동, 20
		//p4 : 아무개, 25
		 
		//Person p3 = new Person();   // 공산품 생산.. 항상 같은 모습만 생성
		Person p3 = new Person("홍길동", 20);  //메소드 인자값 전달 -> 주문 생산이 가능해졌음, 원하는 모습으로 생성
		
		//p3.setName("홍길동");
		//p3.setAge(20);
		
		System.out.println(p3.getName());
		System.out.println(p3.getAge());
		
		Person p4 = new Person();
		
		p4.setName("아무개");
		p4.setAge(25);
		
		System.out.println(p4.getName());
		System.out.println(p4.getAge());
        

    }//main
}

class Person {
    //멤버 변수
    private String name;
    private int age;
    
    //생성자 오버로딩(= 메소드 오버로딩)
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public Person(String name) {
		this.name = name;
		this.age = -1;
	}
	
	public Person (int age) {
		this.name = "익명";
		this.age = age;
	}

    
    //Getter, Setter
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

생성자 vs Setter

  • 공통점

    a. 생성자 : 객체변수의 값을 대입할 수 있다.

    b. Setter : 객체 변수의 값을 대입할 수 있다.

  • 차이점

    a. 생성자 : 객체가 처음 만들어질 때 자동으로 호출된다.

    • 2번이상 호출이 불가능하다.(객체가 태어날때 딱 1번만 실행되고 그 이후에 호출이 불가능하다.)
    • 역할 : 초기화★★★★★

    b. Setter : 개발자가 원하는 시점에 직접 호출한다.

    • N번 이상 호출이 가능하다.
  • 역할 : 수정자 ★★★★★

생성자를 사용하는 이유?

  • 문법의 발전 -> 수많은 목적으로 발전
  • 생산자보다 소비자의 입장을 우선한다. ★★★★★
  • 생산자 : 클래스를 설계하는 개발자
  • 소비자 : 클래스를 사용해서 객체를 생성하는 개발자
  • 생성자 : 생산자를 위한 기술이 아니라, 소비자를 위한 기술이다.
  • 생산자가 클래스를 만드는 횟수 : 평생 1번
  • 소비자가 클래스를 사용해서 객체를 만드는 횟수 : 0 ~ n번 -> 그래서 우선★

★★★★ 인자값이 있는 생성자를 개발자가 만들면 기본 생성자는 더이상 자동으로 만들어지지 않는다.

그래서 기본 생성자는 되도록 생성해두는 편이 좋다!!! ★★★★

public class Ex40_Constructor {

    public static void main(String[] args) {
        
 		//생성자를 사용하는 이유
		Person p5 = new Person(); //익명, -1
		Person p6 = new Person("홍길동", 20); //홍길동, 20
		Person p7 = new Person("아무개"); //아무개, -1
		Person p8 = new Person(22); //익명, 22
	
		
		//생성자를 사용하는 이유
		Member m1 = new Member();
		
		m1.setNo("10");
		m1.setName("홍길동");
		m1.setAddress("서울시");
		m1.setAge(20);
		m1.setAddress("hong@gmail.com");
		m1.setGender("남자");
		m1.setHeight(180);
		m1.setPoint(100);
		m1.setTel("010-1234-6589");
		m1.setWeight(80);
		
		Member m2 = new Member("20", "아무개", "test@test.com", "010-1234-1234", "서울시", 22, 170, 60, "남자", 200);
        
    }//main
}

class Person {
    //멤버 변수
    private String name;
    private int age;
    
    //생성자 오버로딩(= 메소드 오버로딩)
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	

	public Person(String name) {
		this.name = name;
		this.age = -1;
	}
	
	
	public Person (int age) {
		this.name = "익명";
		this.age = age;
	}

    
    //Getter, Setter
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

class Member {
	
	private String no;
	private String name;
	private String email;
	private String tel;
	private String address;
	private int age;
	private int height;
	private  inteight;
	private String gender;
	private int point;
	
	
	public Member() {
		
	}
	
	public Member(String no, String name, String email,String tel,String address, int age, int height, int weight, String gender, int point) {
			
		this.no = no;
		this.name = name;
		this.email = email;
		this.tel = tel;
		this.address = address;
		this.age = age;
		this.height = height;
		this.weight = weight;
		this.gender = gender;
		this.point = point;
    }
        
	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	public int getWeight() {
		return weight;
	}
	public void setWeight(int weight) {
		this.weight = weight;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getPoint() {
		return point;
	}
	public void setPoint(int point) {
		this.point = point;
	}
}

생성자 this

  • 생성자는 또 다른 생성자를 호출할 수 있다.
  • 반복되는 코드의 중복을 제거할 수 있다.
public class Ex40_Constructor {

    public static void main(String[] args) {
        //The constructor Camera() is undefined
        //권장사항 : 보통은 인자가 없는 기본 생성자가 있을거라고 예상
        //Camera c1 = new Camera();

        Camera c1 = new Camera("A001", "white");

    }
}

class Camera {
    private String model;
    private String color;


    //기본생성자는 되도록 생성하는 편이 좋다.(강제는 아님..)
    public Camera() {
        //this.model = "none";
        //this.color = "none";
        this("none", "none");
    }

    // ********생성자는 또 다른 생성자를 호출할 수 있다.(생성자 끼리 -> 불려지는 시점이 동일하기 때문에)
    // 기준이 되는 코드 : 코드들 중 기능이 많은 코드를 선택(할 수 있는 일이 많은 코드)
    public Camera(String model, String color) {

        if(model.equals("none") || model.equals("A001") ||model.equals("B001")) {
            this.model = model;
        }

        this.color = color;
    }


    public Camera(String model) {

        this(model,"none");

        //		if(model.equals("none") || model.equals("A001") ||model.equals("B001") || model.equals("C001")) {
        //			this.model = model;
        //		}

        //		this.color = "none";
    }
}

문서 주석

  • 해당 클래스를 사용하는 개발자들에게 알려주는 클래스 사용법

    • 도움말을 만든다. -> Documentation(기술문서)
  1. 작업 중 풍선 도움말에 보여진다. > 개인작업, 팀작업에 도움이 된다.
  2. 이 주석들만 모아서 별도의 도움말 파일을 생성 할 수 있다. > javadoc.exe

/** 쓰고 Enter치기

/**
* 
* 유저 정보를 담는 클래스 입니다.
* @author 홍길동
*
*/
public class User {

	private String name;
	private String id;
	private String pw;
	
	/**
	 * 기본생성자 입니다.
	 * 모든 멤버를 빈 문자열로 초기화 합니다. 
	 */

	public User() {
		this.name = "";
		this.id = "";
		this.pw = "";
		
	}
	
	/**
	 * 매개변수를 가지는 생성자 입니다.
	 * @param name 유저명
	 * @param id 아이디
	 * @param pw 비밀번호
	 */

	public User(String name, String id, String pw) {
		this.name = name;
		this.id = id;
		this.pw = pw;
	}
	
	/**
	 * 유저명 Getter
	 * @return 유저명
	 */
	public String getName() {
		return name;
	}
	
	/**
	 * 유저명 Setter
	 * @param name 유저명
	 */

	public void setName(String name) {
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

}
  • 문서 주석의 역할 - 작업 중 풍선 도움말에 보여진다. > 개인작업, 팀작업에 도움이 된다.

  • 이 주석들만 모아서 별도의 도움말 파일을 생성 할 수 있다. > javadoc.exe
    1. 해당 프로젝트 선택 - export - java- javadoc

  1. C:\Program Files\Java\jdk1.8.0_281\bin\javadoc.exe

  1. 패키지 선택
  1. 한글 깨짐 방지
  • VM optins에-locale ko_KR -encoding UTF-8 -charset UTF-8 -docencoding UTF-8 입력.

  1. 결과 확인(산출물) -> 파일 위치 : C:\class\java\JavaTest\doc -> index.html 선택


  • 지역 변수의 생명주기
    • 변수 선언문이 실행(생성) ~ 해당 영역 종료(소멸)
  • 객체 변수의 생명주기
  • new, 객체가 생성될 때(생성) ~ 객체의 참조가 모두 끊겨서 가비지가 되고 GC가 그 객체를 회수해가는 순간(소멸)
  • 정적 변수의 생명주기
  • main() 메소드 실행전(생성) ~ main() 메소드 종료후(소멸)
  • 프로그램 시작(생성) ~ 프로그램 종료(소멸)

정적멤버 & 객체 멤버

public class Ex40_Constructor {

	public static void main(String[] args) {
   
		//Monitor
		// - 객체 멤버(model) > 메모리에 아직 없음
		// - 정적 멤버(Owner) > 메모리에 이미 있음
		
		//★★★★ 정적 멤버를 객체 생성을 통해서 초기화를 해야만 하는게 올바른 행동인가?
		// -> 정적 멤버의 초기화는 객체 생성 유무와 상관없이 별도로 실행되야 한다. 
		
		System.out.println(Monitor.getOwner()); //null
		
		//Monitor m = new Monitor(); //이 행동(Monitor())이 이상하다!! -> 생성자 안에서 객체(변수)초기화 + 정적 (변수)초기화)
		
		System.out.println(Monitor.getOwner()); //홍길동
		
        
		//static을 잘 사용안한다. > 사용하기가 어렵다.
        
		//a. 변수 -> 데이터 저장용  -> 사물함
		//1. 객체 변수 -> 개인 사물함
		//2. 정적 변수 -> 공용 사물함.
		

		//개인(홍길동) 사물함 -> 스마트폰 -> 분실 -> ???
		//공용 사물함 -> 스마트폰 -> 분실 -> ?? -> (접근 더 어려움, 원인 찾기 어려움. 컨트롤 어려움)
		
		
		//b.생명주기
		//메모리에 항상 상주하기 때문에 너무 많이 만들면 좋지 않음.
		
		
		//m : 지역변수 
		Monitor m = new Monitor(); // new -> model 변수 생성
        
    }
}

class Monitor {
	
	private String model; //멤버(객체) -> 개인정보
	private static String owner; //멤버(정적) -> 공용정보
	
	//객체 생성자 
	//-> 객체 내부에 있는 멤버를 초기화하는 역할
	//-> 정적 멤버를 초기화 하지 않는다.(x) -> 논리에 안맞음..
	public Monitor() { // new Monitor();
		
		this.model = "M100";
		//Monitor.owner = "홍길동";
		
	}
	
	
	//정적 생성자
	// - 정적 멤버를 초기화 하는 전용 생성자
	// - main() 실행 전에 호출된다.
	static {
		Monitor.owner = "홍길동";
	}
	
	
	public String getModel() {
		return model;
	}

	public void setModel(String model) {
		this.model = model;
	}

	public static String getOwner() {
		return owner;
	}

	public static void setOwner(String owner) {
		Monitor.owner = owner;
	}
	
}

상속, Inheritance

  • 클래스 상속
  • 클래스와 클래스간에 구현 가능한 기술
  • 부모 -> (재산) -> 자식
  • 클래스 -> (멤버(변수, 메소드)) -> 클래스
  • 상속은 자식이 부모의 멤버를 거부할 권한이 없다. > 무조건 100% 물려받는다.
  • JDK기준 > 1단계 ~ 6~7단계
  • 부모 클래스 -> 자식 클래스 // 상속(Inheritance)
  • 슈퍼 클래스 -> 서브 클래스
  • 기본 클래스 -> 확장 클래스

상속을 왜 하는지?

-> 코드 재사용★★★★★★★★★★★★★★★★★★★★★★★★

public class Ex41_inheritance {

	public static void main(String[] args) {

		//부모 클래스
		Parent p = new Parent();
		
		System.out.println(p.a);
		System.out.println(p.b);		
		
		p.aaa();
		
		//System.out.println(p.c);
		//System.out.println(p.d);
		//p.bbb()
		
		System.out.println();
		
		
		//자식 클래스
		Child c = new Child();
		
		//부모로부터 상속받은 멤버
		System.out.println(c.a);
		System.out.println(c.b);
		
		c.aaa();
		
		//자신이 구현한 멤버
		System.out.println(c.c);
		System.out.println(c.d);

		c.bbb();
		
		
		//손자 클래스
		GrandChild g = new GrandChild();
		
		//할아버지가 물려준 멤버 (Parent 클래스)
		System.out.println(g.a);
		System.out.println(g.b);
		
		g.aaa();
		
		//아버지가 물려준 멤버(Child 클래스)
		System.out.println(g.c);
		System.out.println(g.d);
		
		g.bbb();
		
		//자신이 구현한 멤버(GrandChild 클래스)
		System.out.println(g.e);
		System.out.println(g.f);
		
		g.ccc();
		
	}//main

}//Ex41


//부모 클래스(멤버 3개)
class Parent {
	
	public int a = 10;
	public int b = 20;
	
	public void aaa() {
		System.out.println("AAA");

	}
	
}


//자식 클래스(멤버 6개)
// - 반드시 본인만의 멤버를 추가로 구현한다.(******)
class Child extends Parent { // Parent 클래스를 부모로 해서 상속을 받겠다.(Parent와 Child를 상속 관계로 만든다.)
	
	
	public int c = 30;
	public int d = 40;
	
	public void bbb() {
		System.out.println("BBB");
	}
	
}


//손자 클래스(멤버9개) > 생산성이 높아진다 + 사용이 어려워진다.
class GrandChild extends Child {
	
	public int e = 50;
	public int f = 60;
	
	public void ccc() {
		System.out.println("CCC");
	}
	
}

난수생성기

  • Math.random() 메서드
  • Random 클래스
    • nextInt(int)
    • nextInt()
    • nextDouble()
public class Ex42_Inheritance {

	public static void main(String[] args) {
        
        //pseudorandom numbers -> 의사 난수 숫자들
		Random rnd = new Random();
		
		
		for(int i=0; i<10; i++) {
			System.out.println(Math.random()); //0(inclusive)~1(exclusive)
			System.out.println(rnd.nextInt()); //int 범위의 난수 반환 -> -21억~21억
			System.out.println(rnd.nextInt(10)); //0inclusive)~10(exclusive)사이--> 0~9까지(범위 설정) 
			System.out.println(rnd.nextBoolean());
			System.out.println(rnd.nextDouble());
			System.out.println(rnd.nextLong());
		}
        
        
    }
}

상황) 개발자. 담당 업무 > 난수 발생 잦음 > 난수 발생 코드 구현 잦음.

  1. -21억 ~ 21억
  2. 1 ~ 10
  3. 색상 난수 : red, yellow, blue, orange, green
  4. true, false
public class Ex42_Inheritance {

	public static void main(String[] args) {
        
        //s1();
		//s2();
		//s3();
		s4();
  
    }
}

private static void s4() {
		
		//Random을 베이스로 해서 추가 기능을 넣은 클래스 -> 확장(extends)★★★
		MyRandom2 my = new MyRandom2();
		
		//1.
		System.out.println(my.nextInt());
		
		//2.
		System.out.println(my.nextTinyInt());
		
		//3.
		System.out.println(my.nextColor());
		
		//4.
		System.out.println(my.nextBoolean());
		
		System.out.println(my.nextLong());
		System.out.println(my.nextDouble());
		System.out.println(my.nextGaussian());
		
	}


	private static void s3() {
	
		MyRandom my = new MyRandom();
		
		//1. -21억 ~ 21억
		System.out.println(my.nextInt());
		System.out.println(my.nextInt());
		System.out.println(my.nextInt());
		System.out.println(my.nextInt());
		System.out.println(my.nextInt());
		
		//2. 1~10
		System.out.println(my.nextTinyInt());
		System.out.println(my.nextTinyInt());
		System.out.println(my.nextTinyInt());
		System.out.println(my.nextTinyInt());
		System.out.println(my.nextTinyInt());
		
		//3. 색상 난수 : red, yellow, blue, orange, green
		System.out.println(my.nextColor());
		System.out.println(my.nextColor());
		System.out.println(my.nextColor());
		System.out.println(my.nextColor());
		System.out.println(my.nextColor());
		
	}


	private static void s2() {
		
		Random rnd = new Random();
		MyRandom my = new MyRandom();
		
		//1. -21억 ~ 21억
		System.out.println(rnd.nextInt()); //순수 Random기능
		System.out.println(rnd.nextInt());
		System.out.println(rnd.nextInt());
		System.out.println(rnd.nextInt());
		System.out.println(rnd.nextInt());
		
		
		//2. 1~10
		System.out.println(my.nextTinyInt());
		System.out.println(my.nextTinyInt());
		System.out.println(my.nextTinyInt());
		System.out.println(my.nextTinyInt());
		System.out.println(my.nextTinyInt());
		
		//3. 색상 난수 : red, yellow, blue, orange, green
		System.out.println(my.nextColor());
		System.out.println(my.nextColor());
		System.out.println(my.nextColor());
		System.out.println(my.nextColor());
		System.out.println(my.nextColor());
		
	}

	private static void s1() {
		
		Random rnd = new Random();
		
		//1. -21억 ~ 21억
		System.out.println(rnd.nextInt()); //순수 Random기능
		System.out.println(rnd.nextInt());
		System.out.println(rnd.nextInt());
		System.out.println(rnd.nextInt());
		System.out.println(rnd.nextInt());
		
		
		//2. 1~10
		System.out.println(rnd.nextInt(10)); //순수 random 기능 + 사용자
		System.out.println(rnd.nextInt(10));
		System.out.println(rnd.nextInt(10));
		System.out.println(rnd.nextInt(10));
		System.out.println(rnd.nextInt(10));
		
		
		//3. 색상 난수 : red, yellow, blue, orange, green
		String[] color = {"red", "yellow", "blue", "orange", "green"};
		
		System.out.println(color[rnd.nextInt(color.length)]); //순수 random 기능 + 사용자
		System.out.println(color[rnd.nextInt(color.length)]);
		System.out.println(color[rnd.nextInt(color.length)]);
		System.out.println(color[rnd.nextInt(color.length)]);
		System.out.println(color[rnd.nextInt(color.length)]);
		
		
	}
  • s2(), s3()의 외부 클래스
public class MyRandom {
	
	
	public int nextInt() { //구색 갖추기용
		
		//1. -21억 ~ 21억
		Random rnd = new Random();
		return rnd.nextInt();
	}
	
	

	public int nextTinyInt() {
		
		//2. 1~10
		Random rnd = new Random();
		
		return rnd.nextInt(10) + 1;
		
	}
	
	public String nextColor() {
		
		//3. 색상 난수 : red, yellow, blue, orange, green
		Random rnd = new Random();
		
		String[] color = {"red", "yellow", "blue", "orange", "green"};
		
		return color[rnd.nextInt(color.length)];
		
	}
	
	
	public boolean nextBoolean() { //구색 갖추기용
		
		Random rnd = new Random();
		
		return rnd.nextBoolean();
	}
	

}
  • s4()의 외부 클래스 -> Random 클래스를 부모로 모든 기능을 상속 -> 효율적으로 코드를 작성할 수 있다. Random의 기능을 추가적으로 사용할 수 있다.
public class MyRandom2 extends Random { //Random 클래스를 부모로 모든 기능을 상속받는다.

	//nextInt()
	//nextBoolean()
	
	public int nextTinyInt() {
		
		//2. 1~10
		Random rnd = new Random();
		
		return rnd.nextInt(10) + 1;
		
	}
	
	public String nextColor() {
		
		//3. 색상 난수 : red, yellow, blue, orange, green
		Random rnd = new Random();
		
		String[] color = {"red", "yellow", "blue", "orange", "green"};
		
		return color[rnd.nextInt(color.length)];
		
	}
	
}
profile
모르면 괴롭고 알면 즐겁다.

0개의 댓글

관련 채용 정보