[day09]

1. 재귀호출 recursive call
메서드 안에서 자기자신을 호출하는 것을 말함.

2. 메서드 오버로딩 method overloading    **중요함**

1) 한 클래스 내에, 이름이 같지만 매개변수의 타입이나 개수가 서로 다른
여러개의 메서드를 중복 작성 가능.
자바 다형성의 한 경우

2) 조건 
1 - 메서드의 이름이 같아야한다.
2 - 매개변수의 개수 또는 데이터타입이 서로 달라야한다.

주의 - 매개변수의 이름이 다른것은 조건에 해당 안됨.
리턴타입도 오버로딩 조건에 해당 안됨.

3. 생성자 constructor
1) 객체가 생성될때, 객체의 초기화를 위해 사용되는 메서드.
모든 클래스에는 생성자가 있으며, 생성자가 기술이 안되어있으면
"기본 생성자"가 눈에는 안보이지만 자동으로 아무것도 없는 형태로 
만들어지고 호출된다.

2) 초기화 3가지 방식
#1. 생성자 : 인스턴스 변수를 초기화할때 많이 사용



#2. 초기화 블럭 : 클래스 블럭 / 인스턴스 블럭
(주로 안드로이드 할때)
초기화 블럭도 인스턴스 변수를 초기화할때 사용될 수 있는데
생성자와 블럭 둘다 있으면 순서가 블럭이 먼저다.
*구 조 *
#클래스 블럭
static {
// 초기화 코드 작성....
}

#인스턴스 블럭
{
// 초기화 코드 작성....
}


#3. 명시적 초기화
int a = 10; 

3) 생성자 선언 및 활용
- 객체가 생성되는 순간에 new를 통해 자동으로 단 한번만 호출된다.
(반면, 메서드는 필요할때마다 호출가능)


- 생성자의 이름은 반드시 클래스 이름과 동일
- 리턴타입 없다. (return; 키워드는 사용가능
- 매개변수 지정 가능.
- 생성자는 오버로딩 할 수 있다.
- 목적은 객체생성시, 필요한 초기 작업을 하기 위함이다.
변수 초기화, 필요한 메모리 확보, 파일 열기,
네크워크 연결 등 객체 활동전 필요한 초기 준비시 이용

4) 구조
클래스명(타입 파라미터,.....){
// 초기화 시키는 코드들...
}


4. 기본 생성자 dafault contstructor

1) 매게변수없는 생성자
클래스명(){}

2) 클래스 생성자가 하나 이상은 반드시 존재한다.
객체 생성시, 반드시 한번 실행.
클래스에 작성된 생성자가 하나도 없으면 
컴파일러가 자동으로 내용없는 기본 생성자를 추가하고 실행해서 객체 생성한다.
3) 기본생성자가 자동으로 생성되는 경우
4) 기본생성자가 자동으로 생성되지 않는 경우
매게변수 있는 생성자가 작성되어 있을 경우,
컴파일러는 기본 생성자를 만들어 주지 않는다.

 

package day09;


class Mycard{
	int num;
	boolean isBonus;
}
class Student{
	String name;
	int age;
}


class MobilePhone{
	double width;
	double height;
	double depth;
	String color;
	String brand;
}
	
class TheJoeunStudent{
		String name;
		String color;
}

public class Test700 {
		public static void main(String[] args) {
	/*1. 아래와 같은 멤버변수를 갖는 MyCard 클래스를 정의 하세요. 
	   (MyCard 클래스는 카드 한장 만들수 있는 클래스) 
	   - 1 ~ 10 사이 카드의 숫자(정수)를 저장할 num이라는 변수 
	   - 카드가 보너스 카드인지 판단할 isBonus 라는 이름의 변수 (보너스카드면 true, 아니면 false저장) 
	2. 1번에서 만들 MyCard 클래스를 이용하여 카드 한장을 만들고 
	   해당 카드가 몇번이며, 보너스인지 아닌지 지정하고 
	   출력해서 확인해보세요. */
			
			Mycard card = new Mycard();
			card.num= 10;
			card.isBonus = true;
			System.out.println(card.num);
			System.out.println(card.isBonus);
			
		
		Student stu = new Student();
		stu.name = "김범수";
		stu.age = 10;
			
			
		MobilePhone handy = new MobilePhone();
		//handy.width = 5.7;
		//handy.height = 5.7;
				
		TheJoeunStudent s1 = new TheJoeunStudent() ;	
	
		s1.name = "홍길동";
		s1.color = "블랙";
		
		TheJoeunStudent s2 = new TheJoeunStudent() ;	
		s2.name = "홍길동";
		s2.color = "블랙";
			
		}
}
package day09;

import java.util.Scanner;

// 재귀호출 : factorial : 1부터 입력받은 수 n 까지 곱한 결과를 돌려주는 메서드
public class Test7000 {
	
	static long factorial (int n) {
		if(n==1) {
			return 1;
		}else {
			return n * factorial(n-1);
		}
	}

	public static void main(String[] args) {
		
		
		Scanner sc = new Scanner (System.in);
		System.out.println("정수 입력>>");
		int n = Integer.parseInt(sc.nextLine());
		long result = factorial(n);
		System.out.println(result);
		
		factorial(n);
		sc.close();
		
	}
}
package day09;
/*
 * tv 기능 구현
 * 1. 채널 = 배열 10개방 만들어 랜덤값 10개 생성후 배열에 낮은값부터 대입
   2.  채널(up.down)
   3. 채널값 입력받아 저장(없는 채널 입력시 변경 안됨)
   4. 볼륨은 0~ 10 까지 증감
   5. 음소거 기능 
   6. TV 상태값 출력 하는 메서드 (전원 상태, 채널, 볼륨)
   7. 전원이 꺼져있는 경우 모든 기능 동작 안함.
 */

class Tv {
	
	int vol =0;  
	int []ch = new int [10];
	boolean power = false;
	void powerOnOff() {
		power = !power;
	}
	
	void chUp() {
	for(int i=0; i<=10;i++) {
		int ch[i]	
		}
	}
	
	void chDown() {
	//	ch--;
	}
	void volup() {
		
		
		vol++;
	}
	void volDown(){
		vol--;
	}
	void chChange(int num){
		
	//	ch = num; 
	}
}
public class Test71 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		int []ch1 = new int [10];
		int []ch = new int [10];
		// 채널 모두 0으로
			for(int i=0; i<ch1.length;i++ ) {
					ch1[i] = 0;
			}
			

	// 100개 랜덤 생성
			for(int i=0; i<ch1.length ;i++ ) {
	  	 
	  		  ch1[i] =((int)(Math.random()*100)+1);	
	    }
	    // 10개 랜덤을 보드에 넣기
	    for(int i = 0; i<ch1.length; i++) {
	    //보드의 임의의 위치
	  	  // 행 0~10
		
			int x =  (int)(Math.random()*10+1); //행 인덱스 랜덤
		
		
	    // 중복체크 : 같은 자리가 다시 뽑히면 안된다.
	    if(ch1[x]!=0) {
	  	  i--;
	  	  System.out.println("자리중복");
	 
	    		}else {
	  		 ch[x]=ch1[i];
	  	  }
		
	    }
	 }
}

 

package day09;
/*
 *  char[] 배열을 전달받아 출력하는 printCharArray() 메서드와
 *  배역속의 ' ' 공백문자를 ',' 쉼표로 대치하는 
 *  replaceSpace() 메서드를 작성해보저 
 */



public class Test72 {
	
	static	void printCharArray(char[] c) {
	//for(int i = 0; i< c.length; i++)
		 for (char a : c){
			 System.out.print(a);
		 }System.out.println();
	}
	
	static void replaceSpace(char[] c) {
		for(int i = 0; i < c.length; i++) {
			if(c[i] ==' '){
			c[i] = ',';
			
			}
		}
	
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char[] c = {'I',' ', 'a', 'm', ' ', 'a', ' ', 'b', 'o', 'y'}; 
	
	printCharArray(c); // i am a boy 출력
	replaceSpace(c);
	printCharArray(c); // i,am,a,boy 출력
	}

}

 

 

 

package day09;

// 메서드 오버로딩  같은 버튼에 다른 기능 추가
public class Test73 {
	
	
	// 개수차이
	int getSum(int a, int b) {
		return a + b ;
	}
	int getSum(int a, int b, int c) {
		return a + b + c ;
	}
	
	// 타입차이
	int getMul (int a, int d) {
		return a * (int)d;
	}
	int getMul (int a, double d) {
		return a * (int)d;
	}
	
	//순서 + 타입차이
	double Test (int a, double b) {
		return a * b;
	}
	double Test (double a, int b) {
		return a * b;
	}
	
	// 안되는 것들
/*	//-> 리턴타입은 오버로딩 조건에 포함 안됨
	int getSub(int a, int b) {
		return a- b;
	}
		
	double getSub(int a, int b) {
		return (double)a- b;
	}
	
	//-> 매개 변수 이름은 상관없다!! 타입이나 개수가 달라야함 !
	int getDiv(int a, int b){
	return a/ b;
	}
	
	int getDiv(int C, int d){
	return c/ d
	}
*
*
*/	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
			Test73 test = new Test73();
		System.out.println(test.getSum(0, 0));

	}
}

 

 

package day09;

public class Test74 {

	static void add() {}
	static void add(int x){System.out.println(x);}
	//static void add(int a) {System.out.println(a);}
	static void add(long x){System.out.println(x);}
	static void add(long a, int b){System.out.println(a+b);}
	static void add(int a, long b){System.out.println(a+b);}
	static void add(long a, long b){System.out.println(a+b);}
	static void add(int a, int b){System.out.println(a+b);}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
}

 

 

package day09;

class Ex01{
 		String str = "hello java";
 		int year = 2022;

 		void printstr () {
 			System.out.println(str);
 		}

 		void printyear () {
 			System.out.println(year);
 		}
}

class Ex02 {
    int a; 
    boolean isPlay; 
    double d; 
    void printint (int num) {
    	a = num;
    	}
    
    void printbool (boolean or) {
    	isPlay = or;
    }
    
    void printdouble (double numd) {
    	d = numd;
    }
 }


class MobPhone{
	int width ;
	int height;
	double weight;
	String brand;
	
	void Changwid (int num) {
		weight = num;
	}
	
	void call (int num) {
			System.out.println("연결중입니다");
	}
}
/*
1. 아래와 같은 클래스를 만들고, 
   class Ex01{
      String str = "hello java"; 
      int year = 2022; 
   }
   str 변수값을 출력하는 인스턴스 메서드 1개 
   year 변수값을 출력하는 인스턴스 메서드 1개
   총 두개의 메서드를 추가해보세요.
   
2. 1번에서 만든 Ex01 클래스로 객체 생성 2개하고 각각 메서드를 호출해보세요. 

3. 아래와 같은 클래스를 만들고, 
   class Ex02 {
      int a; 
      boolean isPlay; 
      double d; 
   }
   Ex02 클래스안에 변수에 해당하는 메서드를 총 3개 만든다. 
   각 메서드는 외부로부터 데이터를 전달받아, 변수에 대입하는 처리를 한다. 
4. 3번에서만든 Ex02 클래스로 객체생성 한개 하고 
   메서드들을 호출하여 변수에 값대입시키고, 출력해서 확인해보세요. 
   
5. 모바일 폰 클래스 만들기 
   MobPhone 클래스를 만들고, 
   브랜드 이름, 폰의 가로크기, 세로크기, 무게를 저장할 변수를 만드세요. 
   그리고, 전화걸기, 전화받기, 문자 보내기, 문자받기 메서드도 추가하세요. 
   (메서드 안에는 실행되었는지 확인하기 위해 단순히 출력문 하나만 작성) 
6. 5번에서 만든 MobPhone을 이용하여 폰을 하나 생성하고, 
   폰의 모든값을 출력하고, 값도 변경한후, 다시 출력해서 확인해보세요. 
7. 위 모바일 폰 클래스에 만들어둔 메서드중 전화걸기 메서드를 수정하세요. 
   전화걸기 메서드에 전화번호를 던져주면 (예: "010-1111-2222") 
   메서드에서는 해당 전화번호로 전화를 걸고 있다는 출력문 작성. 
   (출력예: 010-1111-2222로 전화를 걸고 있습니다.)
*/
public class Test75 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Ex01 test = new Ex01();
		System.out.println(test.str);
		System.out.println(test.year);
		
			
		Ex02 test2 = new Ex02();	
		System.out.println(test2.d);
		test2.printbool(false);
		test2.printint(100);
		System.out.println(test2.printbool(false));
		
		MobPhone handy = new MobPhone();
		//handy.width = 5.7;
		//handy.height = 5.7;
		System.out.println(test2.a);
		System.out.println(test2.isPlay);
		System.out.println(test2.d);
	}	
}

 

 

package day09;

public class Test76 {
	
	// 클래스 변수
	static int x = 10;
	int y = 20;
	// 클래스 초기화 블럭 : 프로그램 시작하면 자동실행
	static {
		System.out.println("클래스 초기화 블럭");
		x = 200; 
		// y= 300; 객체생성이 안되서
	}
	
	
	// 인스턴스 초기화블럭 : 객체 생성하면 자동실행
	{
		System.out.println("인스턴스 초기화 블럭");
		y=400;
	}
	
	
	public static void main(String[] args) {
		
		Test76 test = new Test76();
		System.out.println(Test76.x);
		System.out.println(test.y);
		
	}
}

 

package day09;

public class Test77 {
	Test77(){
		System.out.println("생성자 실행");
		
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Test77 test = new Test77();
		Test77 test1 = new Test77();
		Test77 test2 = new Test77();
	}
}

 

 

package day09;

public class Test78 {

		// 인스턴스 변수
		double d;
		
		Test78(){
		d= Math.random();
	    }
		
		Test78(double a){
			System.out.println("매개변수 있는 생성자 호출");
			d = a;
		}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Test78 test = new Test78();
		System.out.println(test.d);
		
		Test78 test2 = new Test78(3.14);
				System.out.println(test2.d);
	}
}
package day09;

class Book {
	String title; 	//제목
	String author;	//작가
	
	Book(String t){
		title = t; 
		author = "작자미상"; 
	}
	Book(String t, String a){
		title = t; 
		author = a; 
	}
}

public class Test79 {
	public static void main(String[] args) {

		Book book = new Book("콩쥐팥쥐");  // 책 생산 
		System.out.println(book.title + " " + book.author);
		Book little = new Book("어린왕자", "생텍쥐베리"); 
		System.out.println(little.title + " " + little.author);
	}
}
package day09;
// 기본생성자 자동으로 만들어지는 예시 
class Circle {
	int radius; 
	
	// Circle(){ }
	
	void set(int r) {
		radius = r; 
	}
	double getArea() {
		return radius * radius * 3.14; 
	}
}
public class Test80 {
	public static void main(String[] args) {

		Circle pizza = new Circle(); 
		//pizza.set(15);
		System.out.println(pizza.getArea());
		
	}
}

 

package day09;
// 기본생성자 자동으로 안만들어주는 예시
class Circle1 {
	int radius; 
	
	Circle1() { }
	// 매개변수 있는 생성자를 개발자가 작성하면, 
	// 기본생성자는 안만들어준다. 
	Circle1(int r) {
		radius = r; 
	}
	
	void set(int r) {
		radius = r; 
	}
	double getArea() {
		return radius * radius * 3.14; 
	}
}

public class Test81 {
	public static void main(String[] args) {

		Circle1 c = new Circle1(10); 
		System.out.println(c.getArea());
		
		Circle1 c2 = new Circle1();
	}
}

'P-Language > [Java]' 카테고리의 다른 글

[Java] 11 - 상속과 접근자, final  (0) 2022.06.03
[Java] 10 - this와 객체배열, 캡슐화(getter setter)  (0) 2022.06.03
[Java] 8 - 메서드  (0) 2022.06.03
[Java] 7 - 객체지향  (0) 2022.06.03
[Java] 6 - 다차원 배열  (0) 2022.06.03

+ Recent posts