본문 바로가기
코딩/수업 정리

20.12.01 Tue [007]

by 6^6 2020. 12. 1.
728x90
  • return
  • 변수의 스코프(scope)
  • 메소드의 재귀함수
  • 클래스와 인스턴스 (객체) ★★★
  • 오늘의 문제

 

 

return

return은 밑에값 호출x

public class Practice {
	public static void main(String[] args) {
		divide(9,1);
		divide(0,9);
		divide(9,0);
}
	public static void divide(int num1, int num2) {
			if(num2==0) {
			System.out.println("0으로 나눌수없습니다.");
		return;
		}
		System.out.println(num1/num2);
	}			
}
public class Hello {
	public static void main(String[] args) {
		
		int kor = 93;
		int eng = 84;
		int math =77;
		int sum = kor+eng+math;
		double avg = sum/3.0;
		
		System.out.println(getGrade(avg));
	}
		
	public static char getGrade(double avg) {	
							
		if(avg<=90) {
			return '수';	//이렇게 전부 return값을 줘도 가능
		}else if(avg<=80) {	//하지만 이렇게 return값을 남발하는 코드는 안좋은 코드!!!
			return '우';	//현업에서는 이렇게 사용X
		}else if(avg<=70) {	//return은 종료를 의미하는데 이건 종료를 의미하는 코드X
			return '미';
		}else if(avg<=60) {
			return '양';
		}else {
			return '가';
		}	
	}
}

 

scope(범위)

-실무에서 단 한번도 쓰이지 않음.

-변수에대한 scope는 {중괄호}이다.

 

지역변수★

: {함수안에 있는 변수들}

 

지역변수가 아닌게 있다?

-함수바깥에, 클래스 안에 있는 변수. = 인스턴스변수,객체변수

-인스턴스변수의 범위는 그 클래스 전체.

 

메소드의 재귀 호출

재귀함수 : 함수안에 자기자신 호출

 

!(팩토리얼)

  5! = 5 * 4!

  4! = 4 * 3!

  3! = 3 * 2!

public class Practice {
	public static void main(String[] args) {
		System.out.println("3! : "+factorial(3));
		System.out.println("12! : "+factorial(12));
	}			
	
	public static int factorial(int n) {
		if(n == 1)
			return 1;
		else
			return n*factorial(n-1);
	}
}

→알고리즘은 재귀함수를 굳이 쓰지않아도 풀리기 때문에 실무에서 그닥 쓰이진않는다.

 

 

 

클래스와 인스턴스 (객체) ★★★

객체지향 프로그램 OOP(Object Oriented Programming)의 대표 java

 

클래스란?

변수와 함수. 두가지 기능을 갖고있는 것.

 

클래스와 객체의 차이

2가지.

클래스-설계도,메소드 정의

객체-

인스턴스-그 설계도에 따라서 만들어진 구체적인 제품, 메소드 호출

 

 

참조형(레퍼런스)-뭘참조한다는걸까? 

크기 용도

 

예제를 통해 자세한 설명

package java_rec;

public class Circle { //Circle.java임
	double radius; //1.변수(데이터) 결정 - Alt+Shift+S
	
	public double getRadius(){ //2.get함수 생성
		return radius;		//3.그대로 불러오기
	}

	public void setRadius(double radius){
		this.radius = radius;
	}
	
	public double getArea() { //넓이구해주는 함수
		return radius*radius*Math.PI;
	}
}

 

package java_rec;

public class CirMain {
	public static void main(String[] args) {
		Circle cir; //int a;랑 같은것. 이건 참조형! Circle(클래스명) 첫글자는 대문자써주기
		cir = new Circle(); //new:객체생성 키워드임.(인스턴스)
	//엇!()는 함수!-생성자 함수. 써먹는함수일까 만든함수일까-써먹는거!
	//써먹으려면 메모리로 올려줘야하는데 "올리라고 하는 함수"가 바로 "new"임
	//get,set,getArea 함수 넣어주기 (double이니까 각 8byte)
	//참조형함수의 메모리는 4byte. 주소를 잡으려고하니까 주소한방에 보내려고 (자바 기본 메모리).
		//Circle cir = new Circle(); 로 바로 사용가능. 
		//Circle cir1~무한대=new Circle(); ---붕어빵틀.
		cir.setRadius(10); //=cir의 1000번지 찾아가서 set함수 실행시켜.
		
		double area = cir.getArea(); //=1000번지 찾아가서 getArea함수 실행시켜.
		
		//System.out.println("원 넓이는 " + cir.getArea());
		System.out.println("원 넓이는 " + area); //이렇게 안하고 바로 위에 넣어도됨.
	}
}

 

또다른예제

package java_rec;

public class BankAccount {
	int balance = 0; //예금 잔액
	
	public int deposit(int amount) {
		balance += amount;
		return balance;
	}
	
	public int withdraw(int amount) {
		balance -= amount;
	return balance;
	}
	
	public int checkMyBalance() {
		System.out.println("잔액 : "+balance);
		return balance;
	}
}
package java_rec;

public class BankAccount00 {
	public static void main(String[] args) {
		//두 개의 인스턴스 생성
		BankAccount yoon = new BankAccount(); //yoon 메모리 1000번지에 할당
		BankAccount park = new BankAccount(); //park 메모리 2000번지에 할당
					//★원리★어떻게 사용? .class를 메모리에 올려야 사용가능
		//각 인스턴스를 대상으로 예금을 진행
		yoon.deposit(5000);
		park.deposit(3000);
		
		//각 인스턴스를 대상으로 출금을 진행
		yoon.withdraw(2000);
		park.withdraw(2000);
		
		//각 인스턴스를 대상으로 잔액을 조회
		yoon.checkMyBalance();
		park.checkMyBalance();
		
		
	}

}
package java_rec;

public class DupRef {
	public static void main(String[] args) {
		BankAccount ref1 = new BankAccount(); //4byte 5000번지
		BankAccount ref2 = ref1; //ref2는 3000번지 4byte잡고 
						//BankAccount를 올려놓은 메모리 주소를 가지겠다
				//근데 ref1이 집어넣어졌다. - 데이터타입이 같기때문에 가능!
		
		ref1.deposit(3000);
		ref2.deposit(2000);
		ref1.withdraw(400);
		ref2.withdraw(300);
		ref1.checkMyBalance();
		ref2.checkMyBalance();
	}
}//잔액 : 4300
//잔액 : 4300
package java_rec;

public class PassingRef {
	public static void main(String[] args) {
		BankAccount ref = new BankAccount();
		ref.deposit(3000);
		ref.withdraw(300);
		check(ref); //'참조 값'의 전달 / 참조형도 전달할 수 있다.
		}
	
		public static void check(BankAccount acc) {//참조형 여기에 전달!
			acc.checkMyBalance();
		}
}

 

오늘의 문제

1.아래가 의도하지 않은 결과를 나타내는 이유를 설명하시오.

char ch = '가';

System.out.println(ch+'\n');

 

'\n'은 하나의 문자, 즉 개행 문자를 나타내는 문자 상수이기 때문이다.

'\n'을 메모리에 올리면 char데이터타입으로 올라간다.

의도대로 나오게 하고싶으면 System.out.println(ch+"\n");

→"\n"은 String데이터타입으로 메모리에 올라간다.

 

 

2.변수의 scope 는?

변수의 scope는 {중괄호안에 있는 변수의 범위}이다.


3.지역변수?(local variable)

{함수안에 있는 변수들}이다.

3-1. 인스턴스변수?(instance variable)

{   }함수밖에 있는 변수들이다.


4.펙토리얼을 구하는 재귀 함수를 만드시오.

public class Main {
		public static void main(String[] args) {
			System.out.println(factorial(5));
	}
		public static int factorial(int num) {
			if(num==1) {
				return 1;
			}else{
				return num*factorial(num-1);
			}
		}
}

 


5.클래스의 구성요소는 무엇인가?

변수와 함수

5-1. 클래스의 의미

1. 클래스명.java (반드시 클래스명이어야 함)

2. 클래스명.class (컴파일 된 파일)

 

 

6.원의 넓이는 구하는 프로그램을 아래와 같이 작성하시오.

-원클래스를 만들것

-메인 메소드를 가진 다른 클래스에서 원 객체를 생성할것

package java_prac;

public class Circle {
	double radius;
	
	public double getRadius() {
		return radius;
	}
	
	public void setRadius(double radius) {
		this.radius = radius;
	}
	
	public double getArea() {
		return radius*radius*Math.PI;
	}
}

 

package java_prac;

public class MainCircle {
	public static void main(String[] args) {
		Circle cir = new Circle();	
		cir.setRadius(10);
		
		double area = cir.getArea();
		
		System.out.println("원넓이는 : "+area);
	}
}


7.객체란 무엇인가?

.class파일을 메모리에 올린것.

클래스의 인스턴스

Circle circle = new Circle();
 
/*
Circle → 클래스명 
circle → 생성하려는 객체 이름
new → 객체 생성 키워드
Circle(); → Circle(); 함수
= → 주소를 가리킴
*/


8. 아래의 클래스에 대하여, 메모리 그림을 그리시오.

Rectangle rec = new Rectangle();
 
public class Rectangle {
	int height;
	int width;
	
	public int getHeight() {
		return height;
	}
	
	public void setHeight(int height) {
		this.height = height;
	}
	
	public int getWidth() {
		return width;
	}
	
	public void setWidth(int width) {
		this.width = width;
	}
	
	public int getArea() {
		return width * height;
	}
	
}

9.클래스와 객체의 차이는 무엇인가?

클래스는 설계도, 객체는 설계도로 구현한 모든 대상

객체는 .class를 메모리에 올린것.

 


10.아래의 프로그램을 작성하시오.
-1 부터 num 까지 합을 구하는 class 를 작성하도록 하시오. 

public class Main {
		public static void main(String[] args) {
			total(9);
	}
		public static void total(int num) {
			int sum=0;
				for(int i=1; i<=num; i++) 
					sum+=i;
				System.out.println(sum);
		}			
	}



11.아래의 클래스를 작성하시오.

StraPrint strPrint = new StarPrint();

strPrint.printTriangle(3); 
System.out.println();
strPrint.printReverseTriangle(3); 
===============================
*
**
***

***
**
*
package java_rec;

public class StarPrint {
	
	public void printTriangle(**int num**) {
		for(int i=1; **i<=num;** i++) {
			for(int j=1; j<=i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}	
	}
	
	public void printReverseTriangle(**int num**) {
		for(int i=1; **i<=num;** i++) {
			for(int **j=num;** j>=i; j--) {
				System.out.print("*");
			}
			System.out.println();
		}
	}	
}
package java_rec;

public class StarPrint {
	public static void main(String[] args) {
		
	StarPrint strPrint = new StarPrint();

	strPrint.printTriangle(3); 
	System.out.println();
	strPrint.printReverseTriangle(3); 

 

12.아래의 프로그래밍을 작성하시오.

Gugudan gugudan = new Gugudan();
gugudan.printGugu(10);  //1단부터 10단까지 출력
gugudan.printGugu(20);  //1단부터 20단까지 출력
package java_rec;

public class Gugudan {
	
	public int printGugu(int num1) {
		for(int i = 2; i<=num1; i++) {
			for(int j=1; j<=9; j++){
				System.out.println(i+"x"+j+"="+i*j);
			}
			System.out.println();
		}
		return num1;
	}	
}
package java_rec;

public class Gugudan00 {
	public static void main(String[] args) {
		
		Gugudan gugudan = new Gugudan();
		
		gugudan.printGugu(10); 
		gugudan.printGugu(20); 	
	}
}

 

 

 

13. 아래의 BankAccount 객체에 대하여 그림을 그리시오.

   BankAccount ref1 = new BankAccount();
   BankAccount ref2 = ref1;

 

 

 

 

728x90

'코딩 > 수업 정리' 카테고리의 다른 글

20.12.02 Wed [008]  (0) 2020.12.02
참고하기 좋은 사이트  (0) 2020.12.01
20.11.30 Mon [006]  (0) 2020.11.30
자바 자습  (0) 2020.11.28
20.11.27 Fri [005]  (0) 2020.11.27

댓글