Programming 의 P

  대부분의 집 현관에 있는 디지털 도어락에도 프로그램이 있다. 문을 열기 위해 비밀번호를 입력한다. 그러면 도어락에 있는 프로그램이 저장되어 있는 비밀번호와 동일한지를 확인해 본다. 만약 저장되어 있는 값과 입력한 비밀번호가 동일하면 문이 열린다.

프로그램을 작성하는 것은 이 디지털 도어락과 전혀 다르지 않다.

1. 미리 만들어 놓은 어떤 프로그램에 비밀번호를 전달하여 결과를 기다릴 수도 있고
2. 비밀번호가 맞는지 확인하는 것을 직접 작성할 수도 있다.

프로그래밍을 한다는 것은 모두 이러한 작업을 반복적으로 수행하면서 어떤 기능들을 만들어 내는 것이다.

  이렇게 어떤 값을 입력하고, 결과를 제공해 주는 프로그램을 만들려면 언어가 필요하다. 사람과 컴퓨터 사이에도 언어가 필요하다. 이러한 언어를 프로그램밍 언어라고 한다. Java라는 것도 프로그래밍 언어의 일종이다.

  인터넷을 통해서 매일 접하는 웹 페이지를 구성하는 것은 HTML이며, 이 페이지가 살아서 움직이도록 하려면 자바스크립트라는 것을 사용한다. (이름은 비슷하지만, 자바와 자바스크립트는 전혀 다르다) 이 웹 페이지에서 어떤 정보를 요청하기 위해서 클릭을 하면 서버에 데이터를 요청한다. 그러면 서버는 필요한 데이터를 가공해서 화면에 보여준다. 여기서 서버의 프로그램에 해당하는 부분에서 데이터를 가공하여 화면에 보여 줄 수 있도록 한다. 이 때 사용하는 것이 바로 자바, C, 파이선, PHP 등등의 프로그래밍 언어들이다.

 

자바 프로그램의 메소드 구성

  위에서 얘기했던 도어락의 비밀번호를 확인하는 것을 자바 프로그램으로 작성해 보도록 하자.

첫번째 입력한 비밀번호가 필요할 것이며, 두번째는 입력한 비밀번호가 저장된 비밀번호와 일치여부를 체크하는 부분이 있을 것이며, 마지막으로 결과값이 있을 것이다.

즉, password라는 비밀번호가 넘어가고, 중간에 계산을 하는 부분이 checkPassword()라는 것이다. 그리고, 그 결과로 boolean이라는 것이 나온다.

  이렇게 어떤 값을 주고 결과를 넘겨주는 것을 자바에서는 메소드라고 한다. 즉, checkPassword()라는 것은 메소드 이름이 된다. 여기서 password 라는 것은 매개 변수라고 부른다. 이 매개변수는 필수는 아니다. 마지막으로 boolean이라는 것을 리턴 타입이라고 부른다. 지금까지의 내용을 자바로 바꾸어보면 다음처럼 될것이다.

public boolean checkPassword(String password){

// 비밀번호 검증

}

public을 접근 제어자라고 한다는 것까지 기억해두고 다음으로 넘어가자

boolean : 리턴타입
checkPassword : 메소드
String password : 매개변수

 

자바의 가장 작은 단위 클래스 

  checkPassword() 라는 메소드는 소속이 필요하다. 자바 프로그램의 메소드는 홀로 존재 할 수는 없고, 반드시 클래스라는 것 안에 포함되어야 한다.

public class DoorLockManager {

}

  여기서 DoorLockManager라고 적혀있는 것이 바로 클래스 이며, 클래스 이름 앞에는 반드시 class 라는 단어가 있어야 한다. 여기에도 메소드 앞에서 보았던 접근제어자 public 이 있는 점만 확인하도록 하자. 클래스를 선언하려면 "접근제어자 class 클래스 이름" 순서라는 것을 기억하자.

  그러면 지금까지 내용을 모아보면 다음과 같을 것이다.

public class DoorLockManager {

public boolean checkPassword(String password){

}

}

이렇게 클래스 안에 메소드를 위치시키면 된다. 하나의 클래스 안에는 여러개의 메소드가 존재할 수 있다. 도어락을 생각해보면 비밀번호를 변경할 수도 있고, 잊어버렸을 경우 초기화 하는 기능도 있다. 바로 이 비밀번호 변경과 초기화 기능이 각각의 메소드 형태로 존재하게 되는 것이다.

public class DoorLockManager {

public boolean checkPassword(String password){

}

public void setPassword(String password){

}

public void resetPassword(){

}

}

새롭게 추가된 비밀번호 변경(setPassword)과 초기화(resetPassword) 메소드의 리턴 타입으로 void 라고 정의되어 있는 것을 볼 수 있다. void 라는 리턴 타입은 이 메소드가 수행되어도 아무것도 돌려주는 것이 없다는 뜻이다.

 

클래스는 상태를 갖고 있어야 한다. 

  지금까지 얘기해온 클래스라는 것은 다음의 조건을 만족해야만 한다.

  클래스는 상태(state)와 행동(behavior)이 있어야만 한다.

그리 어려운 내용은 아니고, 지금까지 알아본 메소드가 바로 "행동"이다. 그렇다면 상태는? 상태라는 것은 클래스의 특성을 결정짓는 것을 말한다. 이 상태는 클래스 안에, 메소드 밖에 정의한다.

  앞에서 살펴본 클래스에는 다음과 같이 currentPassword라는 값이 존재할 수 있다.

public class DoorLockManager {

String currentPassword;

public boolean checkPassword(String password){

}

}

  이와 같이 어떤 값을 포함할 currentPassword와 같은 것을 변수라고 한다. 이 변수가 클래스의 특성을 결정짓는 "상태"에 해당한다.

  객체지향을 이야기할 때 앞서 정의한 것처럼,

클래스는 상태(state)와 행동(behavior)이 있어야만 한다.

라고 보통 이야기 하지만, 꼭 "상태"와 "행동"이 있어야 하는 것은 아니다. 클래스를 만들었는데  변수나 메소드가 없다고 클래스가 아니라고 할수는 없기 때문이다.

 

프로그램 기본 =를 이해하자. 

  일반적으로 산수를 할 때,

  1+2=3

  과 같이 계산을 왼쪽에, 결과를 우측에 지정한다. 하지만 프로그램을 할 때는 반대다. 프로그램에서는 아래와 같이 왼쪽에 대입을 할 변수를, 오른쪽에 계산식을 적어 주어야만 한다.

  int a;
  a=1+2;

  이렇게 적어주면 a라는 변수에 3이라는 값이 들어가게 된다. 여기서 int a 라고 적어준것은 a라는 정수형 변수를 선언한 것이다. 변수를 선언할 때는

  타입 변수명;

  과 같이 지정해 주면 된다.

public class Calculator {

public int add(int num1, int num2) {

int sum;

sum = num1 + num2;

return sum;

}

}

  위 코드에서 확인 할 수 있는 것처럼 a=1+2; 처럼 프로그램의 연산에서는 숫자만 더할 수 있는 것이 아니라, 숫자를 나타내는 변수도 더할 수가 있다.

  add() 메소드의 가장 마지막 줄에 있는 return이라는 것은 어떤 값을 돌려줄 때 지정한다.

  지금까지 위에 나온 소스들을 보면 줄 끝에 세미콜론(;)을 확인 할 수 있다. 자바에서 줄의 끝에 뜻하는 표시이다.

 

자바에서 사용하는 기본적인 사칙연산

더하기 +  , 빼기 -  , 곱하기 *  , 나누기 /

 

모든 프로그래밍 언어에는 예약어라는 것이 있다. 

public class Calculator {

public int add(int num1, int num2) {

int sum;

sum = num1 + num2;

return sum;

}

}

여기에 있는 예약어에는 public, class, int, return 이다. 예약어라는 것은 "예약되어 있으니까 다른 용도로 쓰지 못하는 단어"라고 이해하면 된다. 식당에서 예약석에 먼저온 다른 손님을 앉히지 않는 것 처럼 말이다. 일단 여기서는,

  예약어라는 것이 있고,

  예약어는 클래스, 메소드, 변수의 이름으로 사용할 수 없다.

는 정도만 기억하도록 하자.

 

연습문제

1. Calculator 라는 이름을 갖는 클래스를 텍스트 파일에 만들어 보자.

2. 다음과 같은 메소드를 만들어 보자(단, 그 결과를 리턴해 주도록 만들자)

   빼기 : public int subtract(int num1, int num2)
   곱하기 : public int multiply(int num1, int num2)
   나누기 : public int divide(int num1, int num2)

 

정리

1. 클래스란?

2. 메소드란?

3. 메소드의 매개 변수는 어디에 적어주지?

4. 메소드 이름 앞에 꼭 적어 줘야 하는 건?

5. 클래스가 갖고 있어야 하는 두 가지는?

6. 메소드에서 결과를 돌려주기 위해 사용하는 예약어는?

+ Recent posts