- 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;
'코딩 > 수업 정리' 카테고리의 다른 글
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 |
댓글