5.23 JavaStudy

ChoRong0824·2023년 5월 23일
0

Java

목록 보기
20/40

기본적인 반복문입니다. 해당 문제를 10분이내 풀어보세요.
첫 도전시 20분? 걸렸던 것 같습니다.

해당 출력문을 보고 코드 작성

정답 코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {

        for (int i = 1; i <= 10; i++) {
            for (int j = i; j < 10 + i; j++) {
            //   int num = j % 10 == 0 ? 10 : j % 10; // 숫자 10으로 나눈 나머지를 구하고 0이면 10으로 대체.
                int num = 10-j;
                if (j > 10) {
                    num += 10;
                }
                System.out.print(num+" ");
            }
            System.out.println();
        }

        /*for (int i = 1; i <= 10; i++) {
            for (int j = i; j < i + 10; j++) {
                System.out.print(j);
            }
            System.out.println();
        }*/

    }
}

필자는, 3개의 반복문을 돌려서, 조건문을 사용해서 역피라미드에서 10을 초과할경우 출력되게끔 하려고 하였으나, 제대로 구현하지 못했습니다.
(아마 지금은 가능할거임.
왜냐면, 해당 문제에서 KeyPoint는 반복문을 변수로 초기화하는 것입니다)


static은 객체 생성 안하고 바로 올 수 있다고 배웠어. 왜 그런거야?


정답

  • static 키워드는 클래스가 인스턴스화되지 않아도 메서드나 필드에 접근할 수 있게 해주는 것입니다. 이는 프로그램 실행 시 클래스가 메모리에 로드되면서 static 메서드와 변수도 메모리에 할당되기 때문입니다.

  • 즉, static으로 지정된 메서드나 변수는 클래스의 인스턴스가 생성되지 않아도 사용 가능한 것입니다. 이는 프로그램의 전체에서 공유되어야 하는 값이나 애플리케이션 또는 프로그램이 시작될 때 초기화되어야 하는 경우에 사용됩니다.

  • 예를 들어, 수학 연산을 수행하는 Math 클래스에는 static 메서드와 상수가 포함되어 있어 객체 생성 없이 사용할 수 있습니다. 이렇게 하면 메모리 사용이 효율적이며, 코드가 더 간결해집니다.

코드

// static 객체 생성없이 가능 -- > 인스턴스화 때문. -- > 와이 ?
public class Main {
    
    // 정적 변수 설w정
    public static int staticCounter = 0;

    // 인스턴스 변수 설정
    public int instanceCounter = 0;

    // 정적 메서드 설정
    public static void incrementStaticCounter() {
        staticCounter++;
    }

    // 인스턴스 메서드 설정
    public void incrementInstanceCounter() {
        instanceCounter++;
    }

    public static void main(String[] args) {

        // 정적 메서드와 정적 변수 사용\
        Main.incrementStaticCounter();
        System.out.println("정적 counter: " + Main.staticCounter);

        // 인스턴스 생성
        Main example1 = new Main();
        Main example2 = new Main();

        // 인스턴스 메서드와 인스턴스 변수 사용
        example1.incrementInstanceCounter();
        example2.incrementInstanceCounter();

        // 각 인스턴스의 변수 출력
        System.out.println("example1의 인스턴스 counter: " + example1.instanceCounter);
        System.out.println("example2의 인스턴스 counter: " + example2.instanceCounter);

        // 정적 변수는 모든 인스턴스에서 동일한 값을 공유
        System.out.println("example1의 정적 counter: " + example1.staticCounter);
        System.out.println("example2의 정적 counter: " + example2.staticCounter);
    }
}

this, this(), super, super() 차이

  • this : 현재 클래스의 인스턴스, 필드의 명시적으로 나타낼 때 사용되어 집니다.
  • super : 부모 클래스의 인스턴스, 필드를 명시적으로 나타낼 때 사용되어 집니다.
  • this() : 해당 클래스의 생성자를 호출할 때 사용되어 지는 기능입니다.
  • super() : 부모 클래스의 생성자를 호출할 때 사용되어 지는 기능입니다.

필자

thisthis() 는 완전 다른 것입니다. (동일 선상으로 생각하면 안됨)

this : 객체에서 넘어오거나, 클래스에서 설정한 값을 Field에 초기화하려고 사용함.
--> 즉, 자기 자신을 가리키는 참조 변수입니다.

this() : 같은 클래스 내에 다른 생성자를 호출할 때 쓰임

this Code

class Person {
    String name; // 인스턴스 변수
    int age;
    int height; 
    
    Person(String name, int age, int height){
        this.name = name; 
        this.age = age;
        this.height = height;
    }
}

this() Code

class Person{
	String name; // 인스턴스 변수
    int age;
    int height; 
    
    Person(){
        this("Andrew", 25, 185); // Person(String name, int age, int height)를 호출
    }
    
    Person(String name){
        this(name, 25, 185);
    }
    
    Person(String name, int age, int height){
        this.name = name; 
        this.age = age;
        this.height = height;
    }
}
  • this()는 같은 클래스의 다른 생성자를 호출할 때 사용한다.
    위 코드의 Person() 생성자와 Person(String name) 생성자는 this()를 통해 모두 Person(String name, int age, int height) 생성자를 호출하고 있는 것입니다.
profile
정진, "어제보다 더 나은 오늘이 되자"

0개의 댓글