5/30

ONLYS2545·2023년 5월 30일
0

메서드 내부 스택공간은 메서드 내부가 서로 다른 스택임

pulbic class Coin02{

int k = 10;
int n = 20;

static void printRestMoney(){
	System.out.println(n); <--- 에러발생
    }
    
에러가 발생하는 이유는
static이 로드될 때가 n이 로드되는 시점(인스턴스 생성)이후 
보다 이전 시점이기 때문이다.
-->static 안에는 heap변수를 넣을 수 없다.
pulbic class Coin02{

int k = 10;
int n = 20;

void printRestMoney(){
	System.out.println(n); <--- 에러가 발생하지 않음
    }
    
    에러가 발생하지 않는 이유는 printRestMoney()메서드가 
    사용될 때는 new연산자를 통해 인스턴스 생성이 완료된 이후이기 때문     에 시점을 생각해서 에러를 발생시키지 않는다.
package ex03;

import javax.print.event.PrintEvent;

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

        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");

            }
            System.out.println();
        }

        System.out.println();

        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i; j--) {
                System.out.print("*");

            }
            System.out.println();

        }

        System.out.println();
        System.out.println();

        for (int i = 1; i <= 5; i = i + 2) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");

            }
            System.out.println();

        }
        for (int i = 3; i >= 1; i = i - 2) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");

            }
            System.out.println();
        }
        // 2 1 0 1 2 공백문자의 개수

        int rows = 5;
        int middleRow = (rows + 1) / 2;

        for (int i = 1; i <= rows; i++) {
            int numSpaces = Math.abs(middleRow - i);
            int numStars = rows - (2 * numSpaces);

            for (int j = 1; j <= numSpaces; j++) {
                System.out.print(" ");

            }
            for (int j = 1; j <= numStars; j++) {
                System.out.print("*");
            }

            System.out.println();

        }

    }
}

실행결과

별찍기 - 기본 삼각형 (*증가)

Step 1 - 노가다 출력하기

package ex03;

public class MyStar01 {
    public static void main(String[] args) {
        System.out.println("*"); // 별 1
        System.out.println("**"); // 별 2
        System.out.println("***"); // 별 3
        System.out.println("****"); // 별 4
        System.out.println("*****"); // 별 5
    }
}

Step 2 - 단계별로 for문으로 값 찍어보기

package ex03;

public class MyStar01 {
    public static void main(String[] args) {
        // 1단계 첫줄만 찍어보기 (반복문)
        for (int i = 0; i < 1; i++) {
            System.out.print("*");
        }
        System.out.println();

        // 2단계 두번째줄만 찍어보기 (반복문)

        // 3단계 세번째줄만 찍어보기 (반복문)

        // 4단계 네번째줄만 찍어보기 (반복문)

        // 5단계 다섯번째줄만 찍어보기 (반복문)

    }
}

Step 3 - 코드 동일하게 만들어보기

package ex03;

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

        int end = 0;

        // 1단계 첫줄만 찍어보기 (반복문)
        end = end + 1;
        for (int i = 0; i < end; i++) {
            System.out.print("*");
        }
        System.out.println();

        // 2단계 두번째줄만 찍어보기 (반복문)
        end = end + 1;
        for (int i = 0; i < end; i++) {
            System.out.print("*");
        }
        System.out.println();

        // 3단계 세번째줄만 찍어보기 (반복문)
        end = end + 1;
        for (int i = 0; i < end; i++) {
            System.out.print("*");
        }
        System.out.println();

        // 4단계 네번째줄만 찍어보기 (반복문)
        end = end + 1;
        for (int i = 0; i < end; i++) {
            System.out.print("*");
        }
        System.out.println();

        // 5단계 다섯번째줄만 찍어보기 (반복문)
        end = end + 1;
        for (int i = 0; i < end; i++) {
            System.out.print("*");
        }
        System.out.println();

    }
}

Step4 - 코드 리팩토링

package ex03;

public class MyStar01 {
    public static void main(String[] args) {
        int end = 0;
        for (int k = 0; k < 5; k++) { // 행을 반복
            end = end + 1;
            for (int i = 0; i < end; i++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

메서드 내부에 메서드를 정의하는 것은 허용되지 않는다.

캡슐화의 개념

package ex04;

class Cal02 {

    // void 자리는 리턴할 자료형을 명시하는 곳
    void add(int n1, int n2) {
        System.out.println("더하기 : " + (n1 + n2));
    } // 스택을 종료하고 복귀주소를 확인하고 복귀한다.

    void minus(int n1, int n2) {
        System.out.println("minus 호출됨");

    }

    void multi(int n1, int n2) {
        System.out.println("multi 호출됨");
    }

    void divide(int n1, int n2) {
        System.out.println("divide 호출됨");
    }

}

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

        Cal02 c1 = new Cal02();
        c1.add(10, 5);

        Cal02 c2 = new Cal02();
        c2.add(20, 30);
        c2.minus(10, 20);
        c2.multi(20, 30);
        c2.divide(20, 30);

    }
}

    
profile
백엔드 교육과정 기록 velog입니다.

0개의 댓글