Output
Input 1 - 간단
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int A = in.nextInt();
int B = in.nextInt();
in.close(); //닫아줘야 불필요한 메모리 사용을 줄일 수 있다.
System.out.println(A + B);
System.out.println(A - B);
System.out.println(A * B);
System.out.println(A / B);
System.out.println(A % B);
}
}
Input 2 - 클래스, 인스턴스, (코드 정리)
import java.util.Scanner; //Scanner 기능을 구현하기 위함
//class는 객체 설계를 정의하는 부분이다. (실제 객체 생성은 x)
class printact { //output을 출력하기 위한 클래스
Scanner in = new Scanner(System.in); //사용자가 직접 값을 입력
int A = in.nextInt(); //A와 B는 정수
int B = in.nextInt();
//클래스에서는 static은 사용 금지
public void print() {
in.close(); //불필요한 메모리 낭비를 막기 위함, 변수 in 작동 멈춤
System.out.println(A + B);
System.out.println(A - B);
System.out.println(A * B);
System.out.println(A / B);
System.out.println(A % B);
}
}
public class Main { //메인 메소드
public static void main(String[] args) {
//class에서 정의 된 객체 설계도를 구현하기 위해 객체를 생성한다.
printact printact = new printact(); //값을 출력하기 위한 인스턴스(객체)
printact.print(); //class에서 설계한 방식대로 값을 출력하기 위함
//이 print는 class printact 소속이다.
}
}
1. 어제 생활코딩 - 자바 입문에서 배운 전역변수와 클래스를 이용해 코드를 정리하고 싶어서 생각나는 대로 정리했다.
import java.util.Scanner;
class main {
Scanner in = new Scanner(System.in); //전역 변수
int A = in.nextInt();
int B = in.nextInt(); //사실 double값으로 하고 싶었는데 output 보니까 소수점은 취급 안하길래..
public void print() { //클래스에는 static 금지!
System.out.println(A + B);
System.out.println(A - B);
System.out.println(A * B);
System.out.println(A / B); //몫
System.out.println(A % B); //나머지
}
public class Main {
public static void main(String[] args) {
print(); //이 부분에서 에러남
}
}
}
근데 22번 줄 코드가 에러났다.
보니까 클래스로 옮겨놓은 public void print() 이 줄에서 static을 추가하라는데
클래스에서는 static 추가하지 말라고 배워서 혼란스럽다.
static을 추가하면 다시 에러가 난다.
내가 Scanner 기능을 사용해서 사용자가 직접 값을 입력하는 형태로 만들었는데
class 기능을 사용하려면 A에 들어가는 값은 프로그램을 만들 때부터 정해진 값이어야 하나보다.
이 무슨...
import java.util.Scanner;
class mi {
static Scanner in = new Scanner(System.in);
static int A = in.nextInt();
static int B = in.nextInt();
public static void print() {
in.close();
System.out.println(A + B);
System.out.println(A - B);
System.out.println(A * B);
System.out.println(A / B);
System.out.println(A % B);
}
public class Main {
public static void main(String[] args) {
mi.print();
}
}
}
또 에러가 났다.
컴파일 불가다.
class에서 static을 사용할 수 없는 것이 원인이다.
이 방법으로는 안되나보다.
구글링을 열심히 돌려봤는데도 해결되는 것이 없었다.
그래서 질문을 남겼다.
답변을 줄 진 모르겠지만 답변이 오고 충분히 이해를 한 다음 써보도록 하겠다.
답변 1)
-main 함수에 인스턴스 빠져있음
-클래스 정의 -> 인스턴스 생성 -> 내부 매서드 사용 순으로 코딩
-mi 클래스에서 사용자 입력을 받는 부분도 매서드로 빼시는게 좋을것 같습니다.
-클래스 이름도 무슨 동작을 하는지 알아볼 수 있게 지어주세요.
-in 닫는 부분은 print 매서드에 들어가기엔 부적절한듯 합니다. print 매서드에는 출력 관련 로직만 넣어주시는게 구분이 명확하고 좋습니다.
: 클래스, 인스턴스, 메소드 개념을 정확하게 짚고 가야 하는 게 필요한데,
지금 빠져 있는 개념들이 많아서 이해가 가지 않았나보다.
답변 2)
클래스(Mi) 내에 사칙연산 하는 메소드를 만들고 ,
다른 클래스(Main)에 main 메소드 안에서 실행 시키고 싶다는 의미?
public class Mi {
public void calcuate(int A, int B) {
System.out.println(A + B);
System.out.println(A - B);
}
}
public class Main {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
Mi mi = new Mi();
mi.calcuate(A, B);
{
}
: Mi 클래스에 public 없이 생활코딩에서는 그냥 class로 정의한 것 같은데
구조를 보면 맞는 것 같기도 하다. 전체적인 구조를 한 눈에 파악할 수 있게 만들어주었다.
그러나 이클립스에선 실행되지 않았다.
답변 3) 💡
-Mi mi = new Mi();로 객체 생성
-mi.print()로 메소드 호출
-Class mi { } 정의 부분은 객체 설계도 정의한 부분임. 실제 객체 생성된 것은 아님
-Class Mi에는 닫는 괄호 하나 부족, Main 엔 하나 더 많음
: 구세주였다.
일단 print(); 위에 mi mi = new mi(); 인스턴스 하나 생성하고
print(); 앞에는 클래스에서 따로 정의해주었던 이름을 앞에 붙여줬다. (mi.print();)
3번째 내용의 의미는 Class mi {} 정의 부분은 실제 객체를 생성한 것이 아닌, 말그대로 '정의'만 한 것이기 때문에
print(); 위 객체를 생성해줘야 한다는 뜻이다.
괄호 갯수도 생각지도 못했던 문제였다.
결국 3번 답변의 모든 것을 반영한 결과, 정상적으로 입출력이 실행되었다.
[개선 사항]
1. 기초 공부
2. 주석 달기
3. 정리 습관 (코드, 주석 등)
쉬운 코드에 안주하는 것이 아닌,
어제 배운 것들을 사용해보려는 의지가 생겨서 다행이다.
운이 좋게 삽질 2시간만에 답변을 얻었고, 잘 실행되었다.
이 두개의 코드 말고도 다른 여러 코드들이 있었던 것 같다.
그것들은 내가 자바 밑바탕을 좀 다져놓은 다음에 다시 봐야겠다.
'[Language] > Java | Spring | JSP' 카테고리의 다른 글
[Error]Resource leak: 'scanner' is never closed (1) | 2023.10.02 |
---|---|
[백준] 10926: ??! (0) | 2022.04.15 |
[백준]1008: A/B (0) | 2022.04.15 |
[백준]10998: AxB (0) | 2022.04.15 |
[백준]1001: A-B (0) | 2022.04.14 |