지난번 포스팅한 기본 자료형 과 참조 자료형을 이용하여 간단한 사칙연산을 수행하는 코드를 만들어보겠다.
우선은 종이와 펜을 준비하고 그림그리듯 손코딩을 먼저 해보자,
종이에 그림그리듯 손코딩하는것에 익숙해지면 나중에 좀더 복잡한 코딩을 할때, 좀더 수월하게 할수있다.
정석대로 관계도 알고리즘 이런걸 그리는게 아니라 내가 짤 코드를 간단하게 그려보는것이다.
나중에 코딩을 많이 하다보면 머리속에 그려지는 코딩을 그냥 할수 있지만,
초기에는 머리에 있는걸 코딩으로 끄집어 내기가 참 어렵다. 이럴때 손으로 한번 종이에 끄적대면
막혔던부분이 풀리는 경우가 많다.
사칙연산을 하는 코딩을 한다고 생각해보면 우선 더하기(+), 빼기(-), 곱하기(*), 나누기(/) 이렇게 4가지가 있다.
이 사직연산은 우리가 구현해야할 기능(메서드)들이다.
그리고 초반에도 설명 했듯이 이 기능들을 구현하여 모아둔 것이 클래스이다.
그리고 이전 포스팅에서 설명했듯이 클래스는 참조 자료형이고
참조 자료형은 new라는 키워드를 이용하여 객체를 생성해야 우리가 사용할 수 있다.
처음 자바를 접하면 이부분을 이해하기가 어렵다.
그래도 코딩을 하며 계속 따라오다보면 어느순간 완벽히 이해는 못해도 아 이런거구나~ 하고 감을 잡을것이다.(나처럼..)
이야기가 좀 딴길로 갔는데
다시돌아와서 종이와 펜을 들고
우선은 코딩을 한다고 생각하지 말고 사칙연산을 하는 계산기를 만든다고 생각해보자.
그럼 계산기에 필요한 기능은 위에도 말했듯이 4가지가 있다.
이부분을 손으로 그려보면 아래처럼 할수 있다.
계산기 |
|||
더하기 |
빼기 |
곱하기 |
나누기 |
그리고 이것을 토대로 코딩을 해보면
자바는 한글명도 컴파일이 되기때문에,
알아보기 쉽게 하기위해서 한글로 코딩을 하겠다.
class 계산기{
void 더하기(){
}
void 빼기(){
}
void 곱하기(){
}
void 나누기(){
}
public static void main(String args[]){
System.out.println("하이");
}
}
그 다음은 각 기능에서 어떤게 필요할지 생각해보자.
계산기 | |||
더하기 1.두개의 숫자를 받는다. 2.두개의 숫자를 더한다. 3.덧셈의 결과 값을 출력한다. | 빼기 1.두개의 숫자를 받는다. 2.두 수의 뺄셈을 한다. 3.결과값을 출력한다. | 곱하기 1.두개의 숫자를 받는다. 2.두수를 곱한다. 3.결과값을 출력한다. | 나누기 1.두개의 숫자를 받는다. 2.두수를 나눈다. 3.결과값을 출력한다. |
여기서 보면 중복되는 부분이 보이는데, 부분을 빼서 하나의 메서드로 묶을수 있지만,
이건 나중에 천천히 코딩이 손에 익으면 하고, 우선은 적은걸 토대로 코딩을 해보면
class 계산기{
void 더하기(){
//값을 두개 받는다.
//더한다
//값을 출력한다.
}
void 빼기(){
//값을 두개 받는다.
//뺀다
//값을 출력한다.
}
void 곱하기(){
//값을 두개 받는다.
//곱한다.
//값을 출력한다.
}
void 나누기(){
//값을 두개 받는다.
//나눈다
//값을 출력한다.
}
public static void main(String args[]){
System.out.println("하이");
}
}
이렇게 나올것이다.
이건 컴파일해서 실행해봤자 아무것도 안나온다.
앞에 //는 주석이라는 것이다. //뒤에 한줄로 적힌부분은 컴파일이 되지 않는다.
주석의 종류는
//: 한줄주석
/*주석*/ : /*로 시작해서 */로 끝나는 부분까지 주석
/**주석*/ : 문서주석이라는 것인데, 내용이 길기때문에 궁금한분은 구글에 java 문서 주석이라고 검색해보면 상세한 내용을 알수있다.
이제 저 주석으로 적힌부분을 실제 코딩으로 구현을 어떻게 해야하는지 알아보자.
일단 그전에 메서드에 대한 설명이 필요한데,
메서드는
접근제한자 + 반환형 + 메서드명 + (메서드 수행에 필요한 값.......){}
위와 같은 형식으로 작성해야 한다.
- 접근제한자는 이전 포스팅 에서 작성한 내용을 참고하고,
- 반환형이란것은 이메서드가 끝나고 메서드를 호출한곳으로 결과 값을 넘겨 줄때 어떤 자료형이 넘어가는지를 적으면 된다.
위에 적힌 void는 결과값을 호출한곳으로 넘길일이 없다는 뜻이다.
이것은 기본자료형인 char,int,long 등이 올수도 있고 참조자료형인 클래스가 될수도 있다.
- 메서드 명을 적어주고
- 메서드명 다음 괄호안에 이메서드에서 기능을 수행하는데 필요한 값들을 받을수 있는데
이부분도 어떤 자료형인지와 메서드 내부에서 사용할 변수명이 필요하다. (int a, int b) 처럼 쓸수있다.
- 그리고 메서드의 본문인 중괄호 { 메서드 기능 정의 } 의 순으로 되어있다.
이제 덧셈을 만들어보면
//값두개를 받는다.(int a, int b)
void 덧셈(int a, int b){
//더한다
int c = a + b;
//값을 출력한다.
System.out.println("a+b=" + c);
}
처럼 만들수 있겠다.
int를 사용한 이유는 기본자료형에서 봤듯이 정수는 int를 사용하기 때문이다.
이제 이 덧셈을 수행하기 위한 코드를 보면
위처럼 나온다.
메인에 써있는
계산기 c = new 계산기();
이부분이 객체를 초기화하여 해당 객체가 할당된 메모리 주소를 c변수에 넣어준것이고
System.out.println은 시스템 콘솔에 메세지를 출력해주는 명령어
c.덧셈(1,4)가 계산기객체 c에 있는 덧셈 메서드를 찾아서 1과 4를 넘겨주어
덧셈메서드에서 정의한 기능을 수행하게 된다.
이제 위코드를 컴파일 하고 실행을 해보면
위처럼 나온다.
위에 컴파일 옵션에 -encoding UTF-8은
윈도우의 기본 인코딩이 MS949이기때문에 소스에 한글이 섞인상태로 컴파일 하면 오류가 난다.
그렇기 때문에 컴파일 인코딩 옵션을 지정해 준부분이다.
이 인코딩 부분역시내용이 많기때문에 궁금한분들은 구글에 인코딩을 검색해서 알아보면된다.
이제 덧셈을 만들어봤으니 나머지 빼기 곱하기 나누기를 직접 만들어보자.
빼기연산자는 -
곱하기 연산자는 *
나누기 연산자는 /
이다.
완성한 소스는 아래주소에서 확인가능