여덞번째 개발일지

in kr •  7 years ago 

안녕하세요 #a991102 입니다.
오늘은 객체지향프로그래밍 2번째 를 간단하게 설명 드리겠습니다.

3-1 JVM 메모리 구조

  1. 메서드 영역
  • 프로그램 실행 중 어떤 클래스가 사용되면 , JVM 은 해당클래스의 클래스파일을 읽어서
    분석하여 클래스에 대한 정보를 이곳에 저장한다.
    이때 , 그 클래스의 클래스 변수도 이영역에 함께생성된다.

2 .힙

  • 인스턴스가 생성되는공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다.
    즉, 인스턴수 들이 생성되는 공간이다.

3.호출스택

  • 호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면,
    호출스택에 호출된 메서드를 위한 메모리가 할당되며 , 이 메모리는 메서드가 작업을
    수행하는 동안 지역변수들과 연산 중간결과 등을 저장하는데 사용한다.
    그리고 그 메서드가 작업을 마치면 할당되었던 메모리공간은
    반환되어 비워진다.

3-1. 기본형 매개변수와 참조형 매개변수

기본형 매개변수 - 변수값을 읽기만 할 수 있다.(read only)
참조형 매개변수 - 변수값을 읽고 변경할 수 있다.(read & write)

4-1. 재귀호출

  1. 메서드의 내부에서 메서드 자신을 다시 호출하는 것을 '재귀호출' 이라고 하고,
    재귀호출을 하는 메서드를 '재귀 메서드' 라고한다
package 삼월이십일일;

public class FactorialTest {
    public static void main(String args[]) {
            int result = factorial(4);
            
            System.out.println(result);
    }
    static int factorial(int n){
        int result =0;
        
        if(n ==1) {
                result =1;
        }else {
                result = n * factorial(n-1); // 다시 메서드 자신을 호출한다
        }
            return result;
    }
    
}
package 삼월이십일일;

public class FactorialTest2 {
    static long factorial(int n) {
            if(n<=0 || n>20) return -1; 
            if(n<=1) return 1;
            
            return n* factorial(n-1);
            
    }
    public static void main(String args[]) {
            int n =21;
            long result = 0;
            
            for(int i =1; i<n; i++){
                    result = factorial(i);
                    
                    if(result == -1){
                            System.out.printf("유효하지 않은 값 입니다. +(0<n<=20) :%d%n" ,n);
                            break;
                    }
                    System.out.printf("%2d!=%20d%n",i,result);
            }
    }
}

package 삼월이십일일;

public class PowerTest {
    public static void main(String args []) {
            int x= 2;
            int n= 5;
            long result =0;
            
            for(int i =1; i<=n; i++) {
                    result += power(x,i); 
            }
            System.out.println(result);
    }
    static long power(int x, int n) {
            if(n==1) return x;
            return x*power(x, n-1);
    }
}
//제귀메서드

4-1 오버로딩이란 ?
-한클래스 내에 같은 이름의 메서드를 여러 개 정의하는것을 '메서드 오버로딩' or '오버로딩'
이라고 한다.

  • 오버로딩의 조건?
  1. 메서드 이름이 같아야한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.

이상으로 여덞번째 개발일지를 마치겠습니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!