안녕하세요.


이번시간에는 함수를 만들어볼건데요.



명령어()



이렇게 생긴걸 함수라고 합니다(자바에서는 메소드라고 하지만 편의상 함수로 부르기로 했죠). 괄호속에 내용을 적으면 관련된 어떤 동작을 수행하는 녀석이죠. 참고로, 괄호 속에 아무것도 안적는 함수도 있습니다. 이번시간에 만들 함수처럼요.


여태까지 우리는 아래와 같은 4가지 함수를 접해봤네요. (메인함수는 일단 뺍시다)



System.out.print()


System.out.println()


JOptionPane.showInputDialog()


JOptionPane.showMessageDialog()



이 함수들은 자바를 만든 사람이 만들어놓은 함수들이죠. 그런데 놀랍게도 우리가 직접 함수를 제작할 수도 있어요!


일단 아래를 보시죠.







일단 3행의 노란밑줄부터 설명해드릴게요^^; 메세지박스나 인풋박스가 들어있는 도구상자를 가져오는 문장이라고 말씀드렸었죠? 도구상자를 가져와 놓고 사용을 안했다는 뜻의 밑줄입니다. 빨간밑줄은 오류를 나타내지만 노란밑줄은 주의하라는 정도이고 실제로 코드를 실행시켜도 아무런 문제가 발생하지 않습니다.


빨간 네모 부분이 함수를 만들어놓은 부분입니다. 아직 내용은 없지만요.



public static void 함수이름() {

// 내용

}



이렇게 만듭니다. 그러고보니 바로 위에 있는 메인함수하고 생긴게 아주 유사하군요. 우리가 처음에 클래스 만들때 메인함수 만들기에 체크해놓고 만들어서 메인함수가 자동으로 생겼지만 만약에 체크안해놓고 만들었으면 메인함수도 이렇게 수동으로 만들어줘야 됩니다.


무슨말이냐구요?


실제로 한번 해보도록하죠.






ㄴ 프로젝트명에서 우클릭 -> 뉴 -> 클래스




ㄴ 클래스 이름은 Study02로 하겠습니다. 메인함수 만들기 부분에 체크를 하지 않고 피니쉬 버튼을 누릅니다.




ㄴ 스터디02 클래스가 만들어졌는데 허전하죠? 속에 메인함수가 없습니다. 이럴때는 클래스를 지우고 새로 만들든지, 메인함수를 수동으로 적어줘야 합니다.




ㄴ 하지만 일일이 다 적을 필요는 없습니다. 메인함수 같이 중요한 함수는 만들어주는 기능이 이클립스에 있습니다. main이라고 적고 컨트롤+스페이스를 누른다음 main - main method를 선택해주면...




ㄴ 짜잔~ 이렇게 만들어줍니다.




자, 다시 스터디01로 돌아옵시다.





이제와서 보니 여태까지 우리는 메인함수의 내용을 열심히 만들고 있었네요? 그렇다면 모처럼 insa(인사)함수를 만들었으니 인사함수 속에 내용을 적어봅시다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
    }
    
    public static void insa() {
        System.out.println("안녕");
    }
 
}
 
cs


콘솔창에 '안녕'이라고 출력하는 내용인데 실행해보면 아무런 일도 일어나지 않습니다. 똑같은 내용을 메인함수에 적으면 출력이 되는데 어찌된 일일까요?

답을 말씀드리면 자바 코드를 실행하게 되면 메인함수는 무조건 실행하게 되어있습니다. 메인함수가 아닌 함수는 메인함수 속에 그 함수를 실행하도록 적어줘야 됩니다. 아래를 보시죠.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
        insa();
    }
    
    public static void insa() {
        System.out.println("안녕");
    }
 
}
 
cs


함수명();


이렇게 적어주면 그 함수를 실행하게 됩니다. 정식 용어로는 '함수를 호출한다'라고 합니다. 함수를 제작하는 것은 정식 용어로 '함수를 정의한다'라고 합니다.

자바코드를 실행하게되면 맨먼저 메인함수를 호출하는데 메인함수는 지금 insa함수를 호출하도록 정의되어 있습니다. 그래서 컴퓨터는 인사함수한테 가게 되는데 인사 함수 속에는 System.out.println 함수를 호출하도록 정의가 되어있네요? 그래서 컴퓨터는 System.out.println 함수한테 또 갑니다. 그 속에는 괄호속의 내용을 출력하는 내용이 정의되어 있기 때문에 최종적으로 "안녕"이라고 출력되는 겁니다.


이번시간에는 엄청 중요한 개념을 배웠습니다. 이해가 안되면 두세번 정도 복습하시는게 좋을 듯 하네요.

다음시간에는 함수의 존재가치에 대해 살펴보도록 하겠습니다.


감사합니다.


안녕하세요.


이번시간에는 if문을 좀 더 가지고 놀아보겠습니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        int year = Integer.parseInt(JOptionPane.showInputDialog("당신의 출생년도는?"));
 
        int age = 2019 - year + 1;
 
        JOptionPane.showMessageDialog(null"당신의 나이는 " + age + "세입니다");
 
        
 
        if (age >= 20) {
 
            JOptionPane.showMessageDialog(null"성인이시군요");
 
        } else if (age >= 15) {
 
            JOptionPane.showMessageDialog(null"청소년이군요");
 
        } 
    }
 
}
 
cs



지난 시간에 했던 코드.... 처럼 보이지만 뭔가 허전하죠?


네. else 부분이 빠졌습니다. 이렇게 코딩하면 20세 이상도 아니고 15세 이상도 아닌 사람에게는 '당신의 나이는 ~세입니다' 메세지 다음에 아무런 메세지를 보여주지 않게 됩니다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        int year = Integer.parseInt(JOptionPane.showInputDialog("당신의 출생년도는?"));
 
        int age = 2019 - year + 1;
 
        JOptionPane.showMessageDialog(null"당신의 나이는 " + age + "세입니다");
 
 
        if (age >= 20) {
 
            JOptionPane.showMessageDialog(null"성인이시군요");
 
        } else {
 
            JOptionPane.showMessageDialog(null"미성년자이군요");
 
        }
    }
 
}
 
cs



이번에는 else if 부분이 빠졌습니다. 20세 이상이 아닌 그밖의 사람들에게는 미성년자라는 메세지를 던집니다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        int year = Integer.parseInt(JOptionPane.showInputDialog("당신의 출생년도는?"));
 
        int age = 2019 - year + 1;
 
        JOptionPane.showMessageDialog(null"당신의 나이는 " + age + "세입니다");
 
        
        if (age >= 20) {
 
            JOptionPane.showMessageDialog(null"성인이시군요");
 
        }
    }
 
}
 
cs


if만 달랑 있어도 됩니다. 20세 미만인 사람들에게는 침묵 ㅋ




그런데 말입니다. 만약에 8세 이상이면서 13세 이하인 사람들에게 '초등학생'이라고 메세지를 던지려면 어떻게 해야할까요? 두가지 조건을 동시에 만족시키는 경우죠.



if (조건식1 && 조건식2) {


내용


}



이런식으로 코딩하면 됩니다. 특수문자가 들어있네요. &는 시프트를 누른 상태에서 7을 누르면 입력되는데 '엠퍼센드'라고 읽습니다. 하나만 적으면 안되고 두개를 같이 적어주세요. &&AND조건을 나타내는 기호로서 조건식을 모두 만족해야 되는 경우입니다.


코딩을 한번 해보겠습니다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        int year = Integer.parseInt(JOptionPane.showInputDialog("당신의 출생년도는?"));
 
        int age = 2019 - year + 1;
 
        JOptionPane.showMessageDialog(null"당신의 나이는 " + age + "세입니다");
 
        
        if (age >= 8 && age <= 13) {
 
            JOptionPane.showMessageDialog(null"초등학생이군요");
 
        }
    }
 
}
 
cs


인풋박스에 2010을 적으면 10살이니까 8이상이라는 조건에도 만족하고 13이하라는 조건에도 만족합니다. 그래서 초등학생이라고 출력하는 거죠.



이번에는 10살 미만이거나 60세를 넘는 사람에게 '당신은 이 놀이기구를 탈 수 없습니다'라고 안내하는 코드를 짜볼까요? '이거나'라는 말이 들어갔다는 건 두가지 조건 중에 하나만 만족해도 된다는 뜻입니다.



if (조건식1 || 조건식2) {


내용


}



이번에도 생소한 특수문자가 들어갔네요. 엔터키 위에 있는 문자를 시프트를 누른채로 입력하면 됩니다. '파이프'라고 하는 특수문자이고 이번에도 두개를 연속으로 적어야 합니다. 조건식 중에 하나만 만족해도 되는 경우인데 OR조건이라고 합니다.


아래를 보시죠.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        int year = Integer.parseInt(JOptionPane.showInputDialog("당신의 출생년도는?"));
 
        int age = 2019 - year + 1;
 
        JOptionPane.showMessageDialog(null"당신의 나이는 " + age + "세입니다");
 
        
        if (age < 10 || age > 60) {
 
            JOptionPane.showMessageDialog(null"당신은 이 놀이기구를 탈 수 없습니다");
 
        }
    }
 
}
 
cs


출생년도를 1950으로 적어서 메세지가 잘 출력되는지 확인하세요~



if문 공부는 이정도로 해두고 다음과정으로 넘어가겠습니다.


다음시간에는 '함수'를 만들어보도록하죠.


감사합니다.


안녕하세요.


이번시간에는 지난시간에 만들어둔 나이계산기에다가 한가지 기능을 추가하려 합니다.



나이가 20세 이상이면 '성인이시군요'


15세 이상이면 '청소년이군요'


그 밖의 경우에는 '어린이군요'



이렇게 출력시키는거죠.


이처럼 경우에 따라 다르게 처리시킬려면 if문을 사용해야 되는데요. 사용법은 다음과 같습니다.




if (조건식1) {
        조건식1이 참일때 수행할 내용
  } else if (조건식2) {
        조건식2가 참일때 수행할 내용
  } else {
         그 외의 경우에 수행할 내용
  }




실제로 코딩한 모습을 보면 이해가 더 쉬울 듯 하네요. 아래를 보시죠.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        int year = Integer.parseInt(JOptionPane.showInputDialog("당신의 출생년도는?"));
 
        int age = 2019 - year + 1;
 
        JOptionPane.showMessageDialog(null"당신의 나이는 " + age + "세입니다");
 
        
        // 아래가 이번시간에 추가한 코드입니다.
 
        if (age >= 20) {
 
            JOptionPane.showMessageDialog(null"성인이시군요");
 
        } else if (age >= 15) {
 
            JOptionPane.showMessageDialog(null"청소년이군요");
 
        } else {
 
            JOptionPane.showMessageDialog(null"어린이군요");
 
        }
    }
 
}
 
cs


if가 '만약에 ~라면'이라는 뜻인거 알고 계시죠? 그 점을 생각하면 이해하기 쉬울 듯 합니다.

다음 시간에는 if문에 대해 조금 더 배워보도록 하죠.

감사합니다.



안녕하세요.


이번 시간에는 사용자가 출생년도를 입력하면 나이를 계산해주는 프로그램을 만들어보겠습니다.



한국식 나이 = 현재년도 - 출생년도 + 1



이게 공식이 되겠네요. 곧 2019년이 되니까 현재년도를 2019라고 하겠습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        int year = Integer.parseInt(JOptionPane.showInputDialog("당신의 출생년도는?"));
 
        int age = 2019 - year + 1;
 
        JOptionPane.showMessageDialog(null"당신의 나이는 " + age + "세입니다");
 
    }
 
}
 
cs





잘되죠? ㅎ 다 배웠던 내용이라 이번 시간에는 별로 설명할 게 없군요 ㅎㅎ



다음 시간에는 경우에 따라 다르게 일처리를 하는 if문에 대해 배워보도록 하겠습니다.


감사합니다.



안녕하세요.


우선 지난 시간에 했던 코드를 봅시다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        String num = JOptionPane.showInputDialog("숫자를 입력하세요");
        
        JOptionPane.showMessageDialog(null, num + 1);
    }
 
}
cs


언뜻 보기에는 문제가 없어 보이나 num이 문자형이라 제대로 된 덧셈이 되지 않는 문제가 있었죠.

그래서 지난번에 배운 형변환을 사용할 필요가 있습니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        String num = JOptionPane.showInputDialog("숫자를 입력하세요");
        
        int num2 = Integer.parseInt(num);
 
        JOptionPane.showMessageDialog(null, num2 + 1);
    }
 
}
 
cs


11행이 핵심포인트! num을 정수형으로 변환하여 num2에 집어넣는거죠.

13행도 num을 num2로 고칩니다.

실행해서 올바로 출력되는지 확인해보세요~



자, 난이도를 살짝쿵 높여볼게요. 11행 속에 9행을 집어넣어서 한줄로 만드는거죠.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
 
 
        int num2 = Integer.parseInt(JOptionPane.showInputDialog("숫자를 입력하세요"));
        
        JOptionPane.showMessageDialog(null, num2 + 1);
    }
 
}
 
cs



형변환 명령어 속에 인풋박스 명령어가 들어간 형태입니다.


1+(3x(5-2))


위의 수학문제를 풀때 맨 안의 괄호부터 계산하듯이 명령어끼리 중첩되어 있을때도 맨 안에 있는 명령어부터 해석하는게 순서입니다.


사용자가 입력한 문자형 값을 정수형으로 바꾼 다음 num2 변수에 집어넣는다고 해석할 수 있습니다.



다음시간에는 이제까지 배운걸 응용해서 사용자가 출생년도를 입력하면 나이를 출력해주는 프로그램을 만들어보겠습니다.


감사합니다.


안녕하세요.


이번 시간에는 입력상자를 만들어보겠습니다. 흔히들 '인풋박스'라고 하는 건데요.





이처럼 사용자의 입력을 받는 상자죠. 자바에서의 정식 명칭은 '인풋 다이얼로그'이지만 편의상 '인풋박스'라고 하겠습니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        JOptionPane.showInputDialog("숫자를 입력하세요");
        
    }
 
}
 
cs


이런식으로 코딩하시면 되겠습니다. 메세지박스 코딩하는 방법과 유사하니까 별로 어렵지는 않으실겁니다.


JOptionPane.showInputDialog("표시할 내용");


구조는 단순합니다. 이 녀석도 메세지박스처럼 JOptionPane의 한 종류군요.



이제 이걸 응용하여 '인풋박스에 입력한 값에다가 1을 더한 값을 출력하는 프로그램'을 만들어보도록 하죠. 예를 들어 3을 입력하면 메세지박스에 4가 출력되는 거죠.

우선, 사용자가 입력한 값을 변수에 저장할 필요가 있습니다.


자료형 변수 = JOptionPane.showInputDialog("표시할 내용");


이런 방식대로 하면 됩니다.






그런데 에러가 났네요. 빨간 밑줄에 마우스를 갖다대면 이렇게 설명상자가 뜨는데 해석하면 아래와 같습니다.



자료형이 맞지 않음: 문자형을 정수형으로 변환할 수 없습니다.


빠르게 수정할 수 있는 방법이 1개 있음:


num의 자료형을 문자형으로 바꾼다.



'num의 자료형을 문자형으로 바꾼다' 부분을 클릭해보실까요?







int가 String으로 바꼈고 에러표시가 사라졌습니다. 인풋박스에 적은 내용은 문자로 인식되며 문자형 변수에 밖에 저장할 수 없다는 걸 알 수 있죠.

일단 계속 진행해봅시다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        String num = JOptionPane.showInputDialog("숫자를 입력하세요");
 
        JOptionPane.showMessageDialog(null, num + 1);
    }
 
}
 
cs


num 변수에 저장된 값에다가 1이 더해진 값이 메세지박스에 출력되도록 했습니다.






실행해서 5를 적어봤습니다.







역시 51이 나오는군요. 숫자를 입력했지만 문자로 인식해서 그렇죠.




자, 그렇다면 이 문제를 어떻게 해결할 수 있을까요? 그렇습니다. '형변환'을 사용하면 되겠죠!


다음시간에는 이번시간에 만든 코드에다가 형변환을 적용시켜서 올바른 값을 출력시켜보겠습니다.


감사합니다.



안녕하세요.


이번 시간에는 자료형을 변환시키는 방법을 배워보겠습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
package study;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        int a = 1;
 
        System.out.println(a + 2);
 
    }
 
}
 
cs

위 예제를 보세요. 결과가 예상되시나요? 네, 3이 출력되겠죠.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
package study;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        String a = "1";
 
        System.out.println(a + 2);
 
    }
 
}
 
cs

이건 어떨까요? 이번에는 a 변수가 문자형으로 선언되었고 큰따옴표로 묶인 숫자가 들어갔네요. 숫자를 따옴표로 묶으면 문자로 취급되기 때문에 문자형 변수 속에 들어갈 수 있습니다. 실행해보면...

 12

...가 나오네요?! 네, 사실 얼마전에 배웠죠. 숫자+문자 또는 문자+숫자는 산술적인 계산을 하지 않고 붙어서 출력이 됩니다.


자, 그렇다면 이번 시간의 주제인 자료형 변환을 한번 해볼까 합니다. 줄여서 '형변환'이라고 합니다. 문자로 취급된 숫자는 숫자형으로 형변환이 가능합니다. 이번 경우에는 1이 정수니까 정수형으로 형변환이 가능하겠군요. 1에 붙어있는 큰따옴표를 벗겨내는 작업이랄까요 ㅎㅎ




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package study;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        String a = "1";
        
        int b = Integer.valueOf(a);
 
        System.out.println(b + 2);
 
    }
 
}
 
cs


int 변수명 = Integer.valueOf(문자형 변수);


이런 공식입니다. (I가 대문자임에 유의하시구요.)



int b = Integer.valueOf(a);


=을 기준으로 오른쪽이 왼쪽에 들어간다고 했죠? a 속에 있는 값이 정수형으로 변환되어 b에 들어가는 거죠.


이제 3이 출력되는 걸 볼 수 있습니다.



9행을 int b = Integer.parseInt(a); 이렇게 적어도 결과는 동일합니다. 방법이 두가지 있는 거죠. 취향에 따라 골라 쓰시면 되겠습니다.


둘다 영어단어가 좀 어려운데 Integer가 '정수'라는 것만 외워둬도 반은 먹고 들어갑니다 ㅎㅎ



그런데말입니다. 애초에 a를 정수형으로 선언해두면 될 것을 왜이리 세상을 힘들게 사냐구요? ㅎㅎ 다음 시간에 나오는 공부를 하시다보면 형변환의 필요성을 절감하실 겁니다 ㅎㅎ


감사합니다.





< 오늘의 과제 >


본문과는 반대로 정수형을 문자형으로 바꾸는 방법을 인터넷 검색을 통해 알아보세요.



안녕하세요.


이번 시간에는 for문을 공부해보도록 하겠습니다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        for (int i = 1; i <= 3; i++) {
            
            JOptionPane.showMessageDialog(null"빙글");
        
        }
    }
 
}
 
cs


위의 예제를 보시면 코드를 반복해주는 for문(여기서 '문'은 '구문'을 줄인말이라고 이해하시면 편합니다)이 사용됐습니다. 사용 방법은 아래와 같습니다.


for(자료형 변수 = 시작값; 변수 <= 끝값; 증가값) {

     내용

}



세미콜론을 기준으로 세부분으로 이루어져 있습니다.


시작값이 1이고, 끝값이 3이고, 1씩 증가하니까 '내용'을 3번 반복합니다. (제가 변수를 i라고 정했는데 다른 문자도 상관없습니다. 근데 보통 for문에 들어가는 변수는 i로 정하는 경우가 많더군요.)





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        for (int i = 1; i < 3; i++) {
            
            JOptionPane.showMessageDialog(null"빙글");
        
        }
    }
 
}
 
cs


이번에는 가운데 부분에서 등호를 뺐습니다. 몇번 반복할까요? i가 1에서 시작해서 3보다 작을동안 증가하니까 2까지만 증가하겠네요. 따라서 2번 반복합니다. for문에서 가운데 부분은 조건을 의미함을 알 수 있습니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        for (int i = 1; i <= 5; i++) {
            
            JOptionPane.showMessageDialog(null, i);
        
        }
    }
 
}
 
cs


조건을 5 이하로 고치고 메세지박스 내용에다가 i를 넣어주니 점점 증가하는 i값이 출력되네요^^


감사합니다.




< 오늘의 과제 >

5부터 1까지 점점 감소하는 값이 출력되도록 해보세요.


+ Recent posts