Error rendering WebPanel: No renderer found for resource type: velocity Template contents: <meta name="ajs-keyboardshortcut-hash" content="$keyboardShortcutManager.shortcutsHash">
메타 데이터의 끝으로 건너뛰기
메타 데이터의 시작으로 이동

학습 목표

  • 계산기를 구현하면서 자바 문법에 대한 기본을 익힌다.
  • 계산기를 구현하면서 OOP에 대한 맛뵈기를 한다.

과정 1

요구사항

  • 4칙 연산
    • 덧셈, 뺄셈, 곱셈, 나눗셈

소스 코드 구현

  • 다음 소스 코드를 구현하고 실행한다.
 class Calculator {
    static int add(int a, int b) {
        return a + b;
    }
    
    public static void main(String[] args) {
        System.out.println("덧셈 : " + add(1, 2));
    }
}
  • 위 소스 코드를 참고해 뺄셈(sub), 곱셈(mul), 나눗셈(div)을 구현한다.

생각할 꺼리

  • Calculator.add()와 System.out의 관계는?
  • 자바에서 function 문법은 어떻게 되는가?
  • fuction에 static이 따라 다닌다? static이 뭐하는 놈이지?
박태준 피드백
  • 몇번의 시행착오 결과 문자열 뒤 +는 add에 붙은 덧셈기호가 아니라 문자열에 연산을 덧붙여서 출력하라는 뜻임을 알게 되었다.

  • "문자열"과 +add()을 뒤집어보니 뒤집힌 순서대로 출력되었다.

  • 또한 sub, mul 등 연산의 이름을 인식하지 못하는 것 같았고, return 값의 연산을 따라가는 것을 확인하였다.

  • c언어에 빗대면 덧셈연산을 하는 함수와, 출력을 담당하는 메인함수로 나뉜 것과 유사해 보였다.

  • sub, mul등은 함수이름일 것이다.

  • 함수명 뒤 괄호 안에는 인자들을 콤마로 구분하고 순차적으로 연산한다. 

  • static은 정수형 a, b를 class 전체에서 활용할 수 있는 전역의 역할을 하지 않을까 예상했다. 

조유리 피드백

  • 클래스(있는 곳) 이름.함수이름
  • 자바 문법 : 범위(성격?) / 반환형 / 함수이름 /입력형태
  • static : 정지된. 동일 이름으로 프로그램 전체 에서 다른 클래스에서도 부를수 있는애. 자유롭게 부를수 있다.

과정 2

요구사항

  • 4칙 연산
    • 덧셈, 뺄셈, 곱셈, 나눗셈

소스 코드 구현

  • 다음 소스 코드를 구현하고 실행한다.
 class Calculator {
    int add(int a, int b) {
        return a + b;
    }
    
    public static void main(String[] args) {
        Calculator cal = new Calculator();
        System.out.println("덧셈 : " + cal.add(1, 2));
    }
}
  • 위 소스 코드를 참고해 뺄셈(sub), 곱셈(mul), 나눗셈(div)을 구현한다.

생각할 꺼리

  • Calculator cal = new Calculator(); => new는 무엇인가?
  • add()는 무엇인가?
  • main은 add를 바로 호출할 수 없는가? 호출하고 싶은 경우 어떻게 할 수 있을까?
  • 위 소스 코드에서 데이터는 무엇인가?
박태준 피드백
  • static 이 사라지고 Calculator cal = new Calculator();항목이 추가되었지만, 연산결과는 같았다.

  • 4칙연산을 모두 담아 보았다. 결과가 나눠서 출력되었다.

  • 4칙연산을 정의하는 부분에 static을 추가해보았는데, 전역이라면 변수명이 겹칠줄 알았는데 잘 출력되었다.

  • Calculator cal = new Calculator();은 Calculator라는 class 내에서 cal을 쓰면 new Calculator()가 되도록 정의내리는 것 같았다.

  • 그런데 new가 새 class의 생성인지 어떤지는 잘 모르겠다.

  • 별도의 과정 없이 바로 연산하려면 문자열 뒤에 괄호를 치고 연산내용을 쓰면 된다.

조유리 피드백

  • new는 무엇인가? 새로운 아이 생성.
  • add 앞에 static을 붙인다.
  • 데이터가 무엇일까요?ㅠㅠ?
  • [가설과 확인]
  • [가설1] add / multi 등의 함수는 결국 우리가 만들어주는 것이기 때문에 이름을 바꿔도 괜찮을 것이다. 새로 new class 만들 때도 마찬가지! -> T
  • [가설2] static 과  Calculator cal = new Calculator(); 의 관계 : 같은 기능을 한다. + 함께 써줘도 괜찮다. -> T
  • [가설3] static 을 쓰면 그 클래스 안에서, 그리고 그 클래스 밖에서 어디서나 부를 수 있다. 부르는 방법은 /클래스 안에서는 그냥 이름 /밖에서는 class.이름 
  • [가설4] 새로운 클래스를 선언하고 메인에서 새로운 클래스 만든다음에 불러오면 될거임 -> T

 

모임 내용 정리
  • 흥미도는 지난 시간에 비해 올라가거나 비슷한 수준이라고 느꼈다.
  • 생각할 꺼리의 질문 내용이 너무 구체적이었다. 약간 추상적으로 질문하는 것이 생각할 꺼리를 더 많이 만들어 줄 수 있다는 느낌이 든다.
  • static이 있음과 없음의 차이점을 인식하고 있다.
  • 클래스 하나로 국한하지 않고, 별도의 클래스를 만들어 구현해 보는 시도를 했다. 클래스를 분리하면서 static에 대해 더 많은 정보를 알게 되었다.
  • C와 비교하면서 메서드의 순서에 대한 궁금증을 가지게 되었다.
  • text editor와 eclipse 사이에서 어느 도구부터 시작할 것인지 좀 더 고민해 봐야겠다.
  • 자신이 알게 된 부분을 설명하는 부분에서 상당한 자신감이 느껴졌다.
  • static과 new를 설명하면서 자연스럽게 클래스 생성에 대한 논의를 진행했다. 구체적으로 내가 설명하는 부분은 없었다.

 

과정 3

소스 코드 구현

  • 다음 소스 코드를 구현하고 실행한다.

 

class Number {
    int num;

    Number(int num) {
        this.num = num;
    }
    
    int add(int operand) {
        return num + operand;
    }
    
    public static void main(String[] args) {
        Number number = new Number(3);
        System.out.println("덧셈 : " + number.add(4));
    }
}
  • 위 소스 코드를 참고해 뺄셈(sub), 곱셈(mul), 나눗셈(div)을 구현한다.

생각할 꺼리

  • Number(int num)와 int add(int operand)의 차이점은?
  • Number(int num)은 뭐하는 녀석일까?
  • 과정 1에서 Calculator는 Calculator() 이런 녀석이 없어도 괜찮았는데?
  • new Number() 구문을 사용할 수 있을까?

과정 4

요구사항

  • 레이블 없음