학습 목표
- 계산기를 구현하면서 자바 문법에 대한 기본을 익힌다.
- 계산기를 구현하면서 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
요구사항
- java 1주차 - 프로그래밍 Cycle 이해 에서 구현한 오감도를 지금까지 배운 개념을 활용해 개선한다.