5.23 JavaStudy

ChoRong0824·2023년 5월 23일
0

Java

목록 보기
20/31

기본적인 반복문입니다. 해당 문제를 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개의 댓글