분류 전체보기

(Tutorial8)

사용자 정의 함수는 정해진 특정한 기능을 수행하는 모듈(작은 기능을 수행하는 장치)을 의미한다. 함수를 활용하여 하나의 문제를 잘게 분해할 수 있다.

메인함수에서 모든 알고리즘을 처리하면 매우 비효율적이다. 사용자 정의 함수를 통해 각각의 모듈로서 쉽게 수정되고 보완되는 장점이 있다.



1. 사용자 정의 함수를 만들어보자. ( Main 클래스 안 <-> Main함수 밖)

(1) public static 이후에 함수는 [반환형]을 먼저 써주어야한다.  그 다음 [함수명],  [매개변수] 순이다.

- 매개변수는 함수가 처리할 값을 사전적으로 주어주는 것이다.


// 반환형, 함수명, 매개변수

public static int function(int a, int b, int c) {

return 0;

}


2. 3개의 수 최대 공약수를 찾는 프로그램을 만들어보자.

[ 3개의 수 중 가장 작은 수 찾기 -> 찾은 가장 작은 수를 1씩 줄여가면서(줄여나가다가 나타나면 종료되니 최대가 됨) 

  -> 3개 모두 나눈 나머지가 0인 공약수 찾고 바로 반환하여 함수 종료시키기]


(1) 최대공약수를 찾을 때는 먼저 3개의 값 중 가장 작은 수를 먼저 찾아내야한다.

 - if a와 b를 먼저 비교한 뒤 -> b가 더 작은 경우, if  b와c를 비교해서 둘 중 더 작은 값을 min에 넣어준다.

             -> a가 더 작은 경우, if a와 c를 비교해서 더 작은 값을 min에 넣어준다.


int min;

if(a>b) {

if(b >c ) {

min =c;

} else {

min = b;

}

}else {

if(a>c) {

min = c;

}else {

min = a;

}

}


(2) 가장 작은 수를 for문을 통해, 1이 될 때까지  줄여주면서 그 안에 포함된 모든 수(약수 포함)를 돌면서, 

    if문을 통해 [ 3개의 수를 나눈 나머지가 모두 0이 되는, 공통약수]들을 찾아준다.

     만약 i가 반환되면 바로 [return i;를 통해 값을 반환하면서, 함수를 바로 종료] 시킨다. 그러면 더 최대공약수가 나오자마자 바로 함수가 종료되므로, 2번째 큰 공약수는 무시된다.


for(int i = min; i>0; i--) {

if( a%i==0 && b%i==0 && c%i==0) {

return i;

}

}


(3) 만약 최대공약수가 없는 경우에 -1값을 반환하도록 return -1;을 함수 맨 마지막에 준다.

return -1;


(4) 메인함수에서 사용자정의함수 function()을 사용하여, 문자를 출력해주자.


public static void main(String[] args) {


System.out.println("(400, 300, 750);의 최대공약수 : " + function(400, 300, 750) ); 

}


(5) 출력값 

(400, 300, 750);의 최대공약수 : 50



(Tutorial9)


3. 약수중 K번째로 작은 수를 찾는 프로그램을 작성해보자.

 [ 1부터 숫자까지 증가시키면서, 숫자로 나누어 떨어지는 약수가 k번 발견될 때, 반환한다. 이 때 몇번인지는 k--;로 센다]

(1) 매개변수는 2개를 받자, 약수를 찾을 수number k번째를 의미하는 k이다.


(2) 1부터 약수를 찾을 숫자 number까지 1씩 증가시키면서, 약수를 의미하는 [number % i ==0] 을 찾을 때마다, k를 1씩 뺀다

    그러다가 k가 0이 되는 순간에 그 약수 i를 return시킨다.

    ex> 만약 10번째 약수를 찾기위해, k에 10을 집어 넣었다면, 처음 찾았을 때는 9, 2번째찾으면 8, ... , 10번째 찾으면 0이 된다. 

     이 때, 약수를 찾은 횟수가 k만큼 돌아서 0이 되는 순간에 return시켜서 해당 약수를 반환시키는 것이다. 


(3) for문을 통해 1부터 숫자까지 돌았는데, k번째 약수가 안나타난다면, for문을 빠져나와서 -1을 return하도록 한다.

public static int function(int number, int k) {

for(int i =1; i<=number; i++) {

if(number % i ==0 ) {

k--;

if(k==0) {

return i;

}

}

}

return -1;

}


(4) 메인매쏘드에서 함수를 사용해보자. 3050의 10번째 약수를 받아와 result에 넣어주고, 출력하자.

public static void main(String[] args) {

 

int result = function(3050, 10);

if(result == -1) {

System.out.println("3050의 10번째 약수는 없습니다.");

}else {

System.out.println("3050의 10번째 약수는 "+result+"입니다");


}


}


(5) 출력값

3050의 10번째 약수는 610입니다



4. 문자열의 마지막 단어를 반환하는 함수를 작성해보자.

(1) 문자열 하나를 입력 받아,  문자열의 단어 하나를 반환하는 public static char function(String input) {} 매쏘드를 만들자.

(2) input.charAt()을 이용해서, 문자열 중 하나의 단어만 가져올 수 있다. 이때, 파라미터에 문자열변수.length() -1 을 넣으면 가장 마지막 단어의 index를 의미하게 된다.

    (charAt()의 index는 0부터 세고, length는 1부터 세니까.. length-1하면 마지막 index값을 가져올 수 있다)

     

public static char function(String input) {

return input.charAt(input.length()-1);

}


(3) 매인매쏘드에서 사용해본다.

public static void main(String[] args) {

 

System.out.println("Hellow World의 마지막 단어는 "+function("Hello World") +" 입니다.");


}


(4) 출력값 

Hellow World의 마지막 단어는 d 입니다.


5. max()를 활용해서 최대값을 저장하는 함수를 작성해보자. 

[ 2개 중 최대값삼항연사자로 만든 함수를 만들고, 3개 중 최대값은 2개 최대값 함수를 이용해서, 

  최대값을 뽑아 낸 것을 담아 놓고, 그것을 다시 2개 최대값 함수로 비교하자]


(1) 2개의 정수를 받아 삼항 연산자를 이용해서 큰놈을 return하자.


public static int max(int a, int b) {

return (a>b)? a:b;

}


(2) 3개의 정수를 받아, (1)에서 만든 매쏘드를 활용해서 최대값을 뽑아내자. 

public static int function(int a, int b, int c) {

int result = max(a,b);

result = max(result, c);

return result;

}


(3) 메인매쏘드에서 출력해보자.


  public static void main(String[] args) {

System.out.println("(345, 567, 789)중 가장 큰 값 : "+function(345,567,789));

 

}



java언어의 기본적인 입출력방식을 알아보자.

자바에서는 대표적으로 Scanner클래스를 이용해서 사용자와 상호작용할 수 있다.

일반적으로 Scanner sc = new Scanner(System.in);으로 클래스 객체를 생성한 뒤에, 

sc.nextInt();와 같은 방법으로 int형을 입력받을 수 있다.

입력받은 자료는 내부적으로 처리한 뒤에 다시 사용자에게 그 값을 반환한다.


프로그램이 입출력을 잘 지원한다는 것은 사용자 인터페이스가 뛰어나다는 의미와 같다. 나중에 Gui를 배우게 되면 이러한 입출력을 훨씬 용이하게 할 수 있다.


1. 특정한 정수를 입력 받아서 그대로 출력하는 프로그램을 작성해보자.

(1)Scanner라는 클래스의 인스턴스 변수(객체형 변수, 대문자로 시작, 클래스의 객체)인 sc를 만들고,  우항에는 객체를 생성해 초기화를 해주자. 

   이때, 오류가 나는 것을 클릭해서 java.util라는 자바 기본 라이브러리 것을 import하자.

 -파라미터의 System.in은 console창에 입력하는 데이터들을 의미한다.


(2) int i = sc.nextInt(); 는 사용자가 입력한 정수를 i에 넣는 다는 의미이다.


(3) sc.close();를 통해 입출력하는 변수sc를 닫아 주어, 안정적으로 종료시킨다.


import java.util.Scanner;


public class Main {


public static void main(String[] args) {


Scanner sc = new Scanner(System.in); //콘솔창에서 입력받는데 필요한 스캐너변수

System.out.print("정수를 입력하세요 : ");

int i = sc.nextInt();

System.out.println("입력된 정수는 "+i+"입니다");

sc.close();


}


}



2. 파일에 입력된 정수에 100을 곱해서 출력하는 프로그램을 작성해보자.

[ 파일을 컨트롤 하는 file변수 ->  file의 내용을 읽어올 수 있는 scanner 변수]이용

(1) File클래스를 이용해 file이라는 변수를 만들고, 객체를 생성해 초기화를 할 때, 매개변수에는 "input.txt"라는 파일명을 넣어준다.

    이때, 파일은 프로젝트 창에서 새로 생성할 것이다.

File file = new File("input.txt");


(2) Scanner클래스를 사용하는데, 매개변수에는 콘솔창에 입력되는 데이터(System.in)가 아닌 file변수를 넣어준다. 


(3) 매개변수에 빨간줄이 난 것은 아직 input.txt라는 파일이 없어서 file변수가 비어있거나 등등의 예외처리가 안되어서 나는 것이다.

     빨간줄에 마우스를 갖다대어, try/catch문을 입혀주자. (예외처리문) catch문에서는 println으로 파일 읽는데 오류가 발생했다고 띄워주자.


(4) try문 내부에 계속 코드를 이어가는데, while문의 조건으로 sc.hasNextInt()(반환되는 것이 boolean형)를 통해 

    sc가 읽어오는 file(input.txt)에서 '다음에 읽어올 정수가 존재하는지?'를 조건으로 건다.

    그리고 조건문 안에는 실제로 '다음에 읽어오는 정수 값'인 sc.nextInt()에 100을 곱해서 출력해주자. 


(5) while문을 나와서 다음에 읽어올 정수가 없는 것으로서, 입출력이 끝났으니 스캐너함수를 닫아주는 sc.close()로 닫아주자.


File file = new File("input.txt");

try {

Scanner sc = new Scanner(file);

while(sc.hasNextInt()) {

System.out.println( sc.nextInt() * 100 );

}

sc.close();

} catch (FileNotFoundException e) {

System.out.println("파일을 읽어오는 도중에 오류가 발생했습니다");

}


(6) 이제 file 매개변수인 input.txt파일을 만들어주자. Tutorial7 우클릭 > new > File > file name : [ input.txt ]


(7) txt파일 안에 정수를 임의로 입력하자. space로 간격 or 줄바꿈을 주면 숫자들이 구분된다


170 580 30

2000

30

2080


(8) 출력된 값은  아래와 같다.


17000

58000

3000

200000

3000

208000















3. 그룹관리 :  2강의 예제파일( 일러강의02-선택툴-outline-CC)을 열어보면 파란색 스마일 오브젝트가 있다. 

(1) 드래그해서 선택해보면 좌측 상단에 [Path]라는 문구가 보인다. 즉 이것들이 그룹화 안되어 있다는 것이다. 

[Ctrl + G]로 그룹화 한다.(우클릭 Group)으로 해도 된다. 이제 왼쪽상단에는 Group으로 표시된다.

[Ctrl + shift + G]로 언그룹화 한다.


(2) 이제 그룹화 된 내용물을 단독으로 움직일려면 하얀색화살표(a)를 선택한 다음, 빈곳을 클릭해 전체선택이 안된 상태에서, 각 오브젝트를 이동시켜본다. 

그 다음, (v)로 움직이면 다시 그룹된 체 움직인다.


(3) 검은화살표 상태에서 [ 그룹화 된 것을 더블클릭 ]하면 [우클릭>isolated selected group ]과 같은 상태로,  <그룹 안으로 들어오게 된다> 레이어를 보면 알 수 있다.

    이 상태는 하얀화살표처럼 각 오브젝트를 마음대로 움직일 수 있다.  그리고 [빈곳을 더블클릭]해서 그룹 밖으로 나올 수 있다.

*잠깐 그룹을 풀어서 쓸꺼면 이 방법을 쓰자.



4.  이동시 단축키 / 선택시 단축키

1. 이동시 단축키

- 오브젝트를 누른 상태에서  [Shift ] : 각을 맞춰서 이동한다

- 오브젝트를 누른 상태에서 [Alt ] : 마우스를 놓는 지점에서 <복사> - (ppt에서는 Ctrl이 복사)

- [Ctrl + D] : 이전행동 반복실행으로,  <드래그 + shift + alt>로 각맞춰서 + 이동후 복사 한 뒤에,  오브젝트 배열을 이루어 복사 반복으로 많이 쓰인다.


2. 선택시 단축키 : 일러스트는 드래그로 선택시 일부분만 포함되도 -> 통째로 포함이 되어버린다.

(1) 한 오브젝트를 선택한 상태에서 + [shift]를 누르고 클릭하면, 빨간박스는 포함되는 것을 싸고 있지만, 실제 선택되는 부분은 클릭한 부분만 선택된다.

     우측 컬러패널에서 색을 바꿔보자. ( 다시 shift를 누른상태에서 클릭하면 선택이 풀린다)

(2)  하얀색 화살표를 누른상태에서 [alt]를 누르면 하얀색+인, Group Selection Tool로 바뀐다.(+가 생기며, 어떤 기능하는지 모르겠다)

cf)

하얀화살표+[그룹선택도구]는 그룹안에 그룹 + 그룹으로 묶여있는 경우에 사용하기 유용해요. 여러 그룹으로 묶여있는 오브젝트를 그 안에서 또 다른 그룹만 선택할 수 있게 되죠. 그에 비에 

하얀화살표[직접선택도구]는 그룹의 그룹의 그룹으로 묶여있어서 선택하는거 한개만 바로 찔러 들어가게 되는 툴이에요. 그치만 그것까지 세세하게 정리하면서 일하는 사람들이 의외로 적은거 같아요.


(3) [Ctrl]을 누르고 있는 동안 직전에 사용한 도구로 바뀐다. ex> 검은화살표-> 하얀화살표->  Ctrl 누르는 도중은 검은화살표로 바뀌어서 행동함


3. 마법봉 : 선택한 놈과 비슷한 색들을 모두 선택해주는 가져오는 도구.

- 구체적인 것은 Select > same> 에서 선택할 수 있다.

[프로젝트 : javase04 ]


[1] 인터페이스(interface) - 수단


예를 들어, 프린터 포트, vgb포트, usb포트 등 모두 단자, 인터페이스로서 바깥 세상과 통신하기 위한 수단이다.

data encapsulation이란 어떤 객체가 지정된 매쏘드에 의해서 바깥과 통신하는 수단을 구축하는 것이다. 이것을 통해 여러 이익들이 얻어질 수 있다.

이 데이타 인캡슐래이션을 구현화 하는 개념 중 하나가 인터페이스다.


쉽게 설명하면, [노래방 리모콘의 버튼]이라고 생각하면 된다. 숫자를 누르고 시작버튼을 누르면 -> 어떤 객체가 수행할 수 있다는 것을 외부에 알려주면서 통신도 일어나게 한다. 

일반적으로 메세지를 주고 받는데, 객체<->객체간에 주고 받는데, 그 메세지를 주고받기 위한 수단(통로)이 interface이다.

*인터페이스는 매쏘드의 내용이 없고, 선언만 있다.

왜냐면 인터페이스는 외부와 통신하기 위한 수단이므로, 노래방리모콘의 시작버튼일 뿐, 겉에서 볼 땐 노래를 시작하게 하는 것은 아니다.


1. 

public interface Touchable {

void touch();

}


- [public]은 '접근제한자' 라고 한다. 

- [interface]는 인터페이스를 의미한다. 필드와 매쏘드를 가진 클래스라면 class가 들어갈 것이다.

- 클래스와 형식은 보이지만, void라는 [리턴타입]과 Touch()라는 [매쏘드]만 있고 {   }중괄호로의 내용은 없이 바로 끝이난다. 이런형태가 인터페이스이다.

즉, 매쏘드의 선언만 있을 뿐이다.


2. 다형성(Polymorhism)

public class SmartPhone implements Touchable {


public void touch(){

System.out.println("터치를 하다.");

}

}


- 클래스 SmartPhone은 인터페이스 Touchable을 상속하였다(implements). 상속이라는 것은 부모클래스가 자식클래스에게, 자기가 가진 필드와 매쏘드를 물려주는 것인데, 인터페이스도 상속이 된다.

- 클래스의 상속은 [extends]를 쓰지만, 인터페이스의 상속은 [implements]라는 예약어 쓴다.

* 클래스의 상속은 구현화안해도 되지만, 인터페이스의 상속은, 인터페이스에는 실제적인 내용이 없기 때문에, 상속받는 SmartPhone이라는 클래스에서 반드시 구현을 해줘야한다.

 위 코드에서 Touch()매쏘드가  { }중괄호가 열리면서 내용을 작성하였다.

* 인터페이스는 상속(implements)시 여러개의 상속이 가능하다.



[2] 패키지와 API(package & API)


패키지(package) :  interface나 class(객체를 찍어내는 틀, 공통 필드와 매쏘드를 쓰게함)들을, 목적이 비슷한 종류끼리 모아놓은 폴더 같은 것

API(Application Programming Interface) : 프로그램을 만드는데 필요한, 미리 제공되는 패키지(interface+class 모음 폴더)들의 집합 by JDK

*나는 

패키지=class + interface의 모음/ 

API = class+interface의 모음인 패키지들이 제공되는 것 = 라이브러리

이라 기억할 것임.

가장 먼저 볼 패키지는 Java.lang이라고 하는 패키지이다. 실습시간에 살펴본다.

구글에서 Java SE 8 API 검색 하면된다. 라이브러리라고도 한다.


총정리)

자바는 OOP의 개념으로 이루어진 객체지향언어이다. 객체끼리 메세지를 주거받거나 객체를 매쏘드로 이용하는 것

객체는 모든 것이다.

클래스는 객체를 만들어내는 틀이다.

상속(inheritance)는, 클래스만으로 부족하여, 부모클래스가 자식클래스에게 Field와 Method를 물려주는 것이다.

인터페이스(interface)는 다른 객체와 통신하기 위한 수단이다.(내용물은 x , 쓰는놈이 구현화해야함)

패키지(package)는 class와 interface들인데, 비슷한 목적을 가진 것들을 분류해놓은 폴더이다. ex> java.lang



[3] 실습 [javase04]

(1) 새로운 프로젝트(javase04)를 만들고, src > 우클릭 > java > interface >  Package(클래스+인터페이스 모음) : test / Name : Touchable 이라 만든다.

(2) 내부에 void touch(); 매쏘드를 만들자. 인터페이스는 { } 중괄호를 이용해서 매쏘드의 [body]를 만들어주면 오류가 뜬다.  내용물은 비어있어야한다.


package test; //패키지 선언이다. 인터페이스 Touchable은 test라는 패키지안에 들어있게 된다.


public interface Touchable {

void touch();

}


(3) 이제 Touchable을 상속받는 클래스 SmartPhone을 만들어본다. 

 *test패키지 우클릭 >new>class> 

Package : test확인 후 / Name에 SmartPhone / Interfaces > Add... > Touchable을 검색해서 상속할 인터페이스를 추가 / main매쏘드 추가(실행할 클래스니까)


package test;


public class SmartPhone implements Touchable {


@Override

public void touch() {

// TODO Auto-generated method stub


}


public static void main(String[] args) {

// TODO Auto-generated method stub


}


}


(4) 생성해보면 위와같이, touch()라는 매쏘드가 자동으로 오버라이딩 되어있다. ( touch()에 에러가 나면, 이클립스를 다시시작하면 없어진다.)

(5) touch()매쏘드 내부에는 출력문을 하나 적어준다. 

(6) 메인매쏘드에서는 SmartPhone의 객체를 하나 만들어보고, 클래스의 touch()매쏘드를 호출해서, 실행시켜보자. 

public static void main(String[] args) {

// TODO Auto-generated method stub

SmartPhone s = new SmartPhone();

s.touch();


}


(인터페이스의 빈 매쏘드-> 구현화로서, 내용을 적어주고 -> 객체를 생성해서 사용) : 

굳이.. 빈 매쏘드를 채워서 사용하는지 아직까지는 필요성을 못느끼겠다.



[4] API문서(비슷한목적의 class/interface를 모아놓은 패키지를 제공해주는 것 = 라이브러리) 보기

1. 구글에 'java se 8 api'라고 검색한 뒤, 오라클 홈페이지의 문서를 보자(프로그램 제거에서 나의 자바버전 확인했다)

- https://docs.oracle.com/javase/8/docs/api/

2. api문서에서 첫번째 화면에 Packages가 나와있다. java.***.*** 이 설명과 함께 제공된다.

3. java.lang을 찾아가보자. 자바프로그래밍 언어의 디자인에 대한 기본적인 클래스들이라고 나와있다. 클릭해보자.

4. Interface Summary 와 Class Summary가 있다. 여기서 눈여겨볼 것은 Class Summary의 Object다.(클래스, 인터페이스는 대문자 시작)

- Object는 모든 클래스 계층구조(hier archy)의 뿌리. 이말은, 우리가 만든 모든 클래스의 머리에는 Object가 부모로 존재한다.

5. Object를 클릭해보면, 생성자(Constructors)에 대한 설명이 나온다. 그리고 Method에 대한 것들이 나온다. 

6. 우측의 hashCode()라는 매쏘드를 써보자.설명에는 객체에 대한 해쉬코드를 리턴해주는 매쏘드라 나와있다.


7. 실습화면에서

(1) SmartPhone객체를 참조한 변수 s.hashCode();를 작성해보자. (즉, 우리가 만든 클래스 SmartPhone이라는 것은, 클래스이므로 object클래스의 자식이고, 그 Object라는 클래스속 매쏘드 .hashCode();를    우리가 만든 클래스의 객체인 s에서도 사용이 가능한 것이다.)

(2) 이걸로 끝이 아니다 hashCode();에 마우스를 갖다 대면 리턴타입으로 int라고 나와있다. 좌항에서 int변수에 결과값을 받는다. 그 값을 출력해보자.

-hashCode();는 객체마다 고유의 int값을 리턴한다.


SmartPhone s = new SmartPhone();

s.touch();

int i = s.hashCode();

System.out.println(i);


8. 중요한 것은,  우리가 만든 클래스일지라도, SmartPhone 이라는 클래스는 Object를 상속받고 있고, 그 Object의 매쏘드인 hashCode();라는 매쏘드를 쓸 수 있다.

 

[프로젝트 : javase03 ]


[1] 데이터 캡슐화(data encapsulation)


캡슐화란 캡슐처럼 안쪽 내용물이 전혀 보이지 않게 된다. 이때, 안쪽의 내용물은 데이터 혹은 필드(속성)을 의미한다. 

그리고 그 속에 필드와 같이 정의된 매쏘드를 통해서 필드는 외부와 통신하게 된다.


*캡슐화에 따른 이익

1. Modularity(모듈화) : 객체 안에다가 쓰인 소스코드가 <독립적>으로 존재할 수 있게 되어, 어디서든 쓰일 수 있는 <유연성>이 생긴다.

2. information-hiding(정보 은닉) : 가장 기본적인 특징이다. 정보은닉의 대표적인 예가 데이터캡슐화라고 할 수 있다. 안쪽의 상세내용을 숨기면서 매쏘드를 통해 외부와 통신한다.

3. Code re-use(코드 재사용) : 잘 만들어진 객체는, 다른 개발자들이 가져와서 재사용할 수 있다. 모듈화를 해놨기 때문에 가져와서 붙혓다가 뗄 수 있는 것이다.

4. Pluggability and debugging ease : 플러거빌리티는 마음대로 뺏따 꼽았다 하며 대체될 수 있다는 뜻이고, 하나의 모듈로서 다른 것과 맞물리지 않기 때문에 디버깅 하기 쉽다. 고장나면 바꿔끼면 된다.




[2] 상속(inheritance)


부모클래스가 자식클래스가 <필드와 메소드>를 물려주는 것. is a(이즈 어) 관계라고 한다.



예를 들어)  

[생물] 이라는 클래스는  

[동물] 과 [식물] 클래스로 나뉘어진다.(자식클래스로 가진다)


이때, 포함관계를 생각하여 반대로 화살표(uml, 상속을 나타내는 화살표)는 거슬러서 올라간다고 생각하면, 

[동물->생물] or [식물-> 생물]의 관계가 된다고 생각할 수 있다.

 [동물] is a [생물] , [식물] is a [생물] 이 된다.

[동물]도 [포유류]와 [조류] 로 나눌 수 있고, [포유류]도 [인간]과 [원숭이]로 나눌 수 있다.

이러한 것을 계층구조도 [hierarchy(하이어러키)] 라고 한다.

화살표가 위로 갈수록 <일반화> 내려갈수록 <구체화>가 되는 것이 계층구조도의 특징이다.


이때, 부모클래스는 필드와 매쏘드를 물려준다고 했으니, [생물]이 살아있다()라는 매쏘드를 가지고 있다면, [동물]과 [식물]모두 살아있다()라는 매쏘드를 가지고 있게 된다.

[동물]이 움직인다()매쏘드를 가지고 있으면, [포유류], [인간] 과 [원숭이] 다 같이 움직인다() 가지게 된다. 

그러므로 굳이 [인간]은 움직인다()라는 것을 매쏘드를 만들어 놓을 필요가 없게 된다. 

=> 반복적으로 들어가야하는 코드를 줄여주는 상속의 가장 큰 특징이 있다. 형변환에 있어서 가장 큰 힘을 발휘하는 것이 상속이다.


자바의 구조는 모든 계층구조도의 위(root)에는 Object(객체)라는 클래스를 가진다. 

Object(객체)라는 클래스에 있어서 위로 올라가는 <is a>관계를 생각해보면, [생물]도 Object(객체)고, [동물]도 객체고, [포유류]도 객체고, [인간]도 객체가 되게 된다.



public class Car{


String color; // [ 필드 ]  혹은 [ property ] 혹은 [ member variable(멤버변수) ] 3가지로 불린다.

void run(){   //매쏘드

System.out.println("차가 달립니다"); 

}

}


public class Avante extends Car{   // Avante클래스는 위에서 만든 Car라는 클래스를 상속하였다.

public static void main(String[] args){

Avante a = new Avante(); // 객체를 만들어서, a라는 변수에 넣어줬다. 

a.color = "빨간색"; // Car클래스를 상속한 Avante의 객체는 Car클래스의 필드(color)를 사용할 수 있따.

a.run();    // Car클래스를 상속한 Avante의 객체는, Car클래스의 매쏘드run()을 사용할 수 있다.


}

}


*멤버변수 = 클래스 내 필드 라 생각하는 버릇을 가지자


(1) extends는 상속의 예약어(다른데서 쓸수 없음) 이다.

(2) 구조는 [Car]라는 클래스가 있고, [Car]에는 color와 run()매쏘드가 있다. 그리고 [Avante]는 [Car]를 상속했다.

    -> Avante는 Car의 필드와 매쏘드를 모두 쓸 수 있다.

(3) 메인매쏘드라는 것은, 클래스를 실행할 때, 실행되는 매쏘드이다.

(4) [Car]는 [부모클래스] = [super class], [Avante]는 [자식클래스] 혹은 [sub class]



[3] 실습


1. 이클립스 폰트 설정 바꾸기

(1) 구글에서 naver개발의 '나눔고딕코딩' 글자를 다운받는다. 영문과 고정폭을 가지고 있어서 쓰기가 좋다

 - https://github.com/naver/nanumfont

(2) 다운받은 파일을 더블클릭해 설치한다.

(3) 이클립스의 window>preferences> General > Appearance > Colors and Fonts > Basic > [ Text Font ]를 선택 - Edit버튼을 눌러, 

나눔고딕코딩 글꼴을 선택 & 글자크기도 조절한다.

* 나는 기존에 것이 더 맘에 들어서 default 눌러서 다시 돌아왔음.

* 만약 줄번호가 보이지 않는다면, 회색부분에서 우클릭으로 show line numbers를 선택해준다.

*  우측 상단에 J 모양의 아이콘은 Perspective(펄스펙티브)아이콘으로, 자바클래식에서 다양한 시각으로 왔다갔다 할 수 있다. 

이것을 끌어다가 PackaageExplorer의 왼쪽 패널로 이동시키고, show text로 바꿔주자. 


2. 실습하기


(1) 새로운 프로젝트 javase03으로 만든다.

(2) src폴더에 우클릭 > new class> Car라는 클래스이름으로 생성하고, 

나중에 만들 클래스에서 필드와 매쏘드만 상속하고, 실행은 안시킬 것이기 때문에 메인함수 생성은 체크하지않는다.

안에 필드와 매쏘드를 만들어 준다.


public class Car {

String color; //필드, 멤버변수


void run() {  //매쏘드

System.out.println("차가 달려요");

}

}


(3) src폴더 우클릭> new class> Avante클래스를 만드는데, superclass에 기본 <java.lang.Object>로 되어있는 것을 [edit]를 눌러,

 <Car>를 쳐서 검색하여 선택한다. 메인매쏘드도 체크를 해준다.


(4) Avante클래스의 메인함수에다가, 객체를 생성하여 변수 a에 넣어준다. a. 만 쳐도, 상속한 Car클래스의 필드와 매쏘드가 자동완성 항목으로 뜨게 된다.

public class Avante extends Car {


public static void main(String[] args) {

// TODO Auto-generated method stub

Avante a = new Avante();

a.color ="빨간색";

a.run();

System.out.println(a.color);


}


}



(Tutorial5)


*기본 데이터 타입 복습

---

byte - 1byte(8비트) 

short- 2byte(16비트)- 작은 정수를 표현할 때 사용

int - 4byte(32비트)

long-8byte-int보다 더 큰 정수

---

float -4byte -실수

double-8byte- 더 큰 실수

---

boolean- false or true

---

char - 2byte 


*헷갈리는 연산자

i++, ++i는 모두 1씩 증가시키는 것은 같으나, 출력함수 내에서는 역할이 다르다

i++ : 1을 더한 다음 출력 / ++i : 출력 후 1을 더함


i++ 와 i+=1;과 i = i+1은 모두 동일한 표현이라 할 수 있다.


---

100 < x < 200 을 프로그래밍 언어로 표현 하는 것은 잘못된 표현이다

( 100 < x ) &&( x < 200 ) 으로 앤드 연산자를 사용해서 표현해야한다.

---



<조건문>

조건문과 반복문은 프로그래밍에 있어서 논리의 흐름을 정하는 가장 기본적인 기술이다.


1. if문을 이용해서, 특정 문자열을 포함하는지 확인하는 프로그램을 작성해보자.

- String 변수는 비원시적 자료형으로서, 클래스기반으로 생성되어 있으며, 내부적인 함수를 변수. 으로 확인할 수 있다. 이 중에 contains를 이용해보자


public static void main(String[] args) {


String a = "I Love You.";

if(a.contains("Love")) {

System.out.println("Me too.");

}else {

System.out.println("포함하지 않네요");


}

}


(Tutorial6)


2. if-else if-else문을 이용해서, 점수에 따라 다른 메세지를 출력하는 프로그램을 작성해보자.

- 큰 점수를 기준으로해서 >= 크거나 갔다의 조건문을 if - else if  - else(마지막은 else로 끝나자**)순으로 사용하자

(if와 else로 보통 2개 조건만 거는데, 3개 이상의 조건에서 가운데 else if를 삽입한다고 생각)


public static void main(String[] args) {


int score = 95;

if(score >= 90) {

System.out.println("A+입니다.");

}else if(score >= 80){

System.out.println("B+입니다.");


}else if(score >= 70){

System.out.println("C+입니다.");


}else 

System.out.println("D+입니다.");


}

}


3. 문자열과 정수형을 각각 조건문을 이용해 활용해보고 차이점을 알아보자.

(1) 자바에서는 String을 비교할 때, equals() 매쏘드를 사용한다. 그 이유는 타 자료형과는 다른 비원시적 자료형이기 때문이다.

(내부 클래스 기반의 함수를 가짐)

 

String a ="Man";

int b = 0;


if(a.equals("Man")) {

System.out.println("남자입니다.");

}else {

System.out.println("여자입니다.");


}

if(b ==3) {

System.out.println("b는 3입니다.");

}else {

System.out.println("3이 아닙니다.");

}

(2) String의 비교연산자 중에 equalsIgnoreCase()대소문자 상관없이 문자열을 비교할 수 있다.


if(a.equalsIgnoreCase("man") && b == 0) {

System.out.println("a는 대소문자 상관없이 man이고, b는 0입니다.");

}else {

System.out.println("a는 대소문자 상관없이 man이 아니거나 b는 0이 아닙니다.");


}



<반복문>

4. while문을 이용해서 1부터 1000까지 합을 출력해보자.

- while문은 true일 때까지 돌아간다. i는 1부터, 1000까지 총 1000회를 돈다.

- while 안에서  i++;는 대입이 다 끝난 뒤에, 1이 더해진다. 즉,  sum+=i++; 에서 최초의 i값을 대입한 뒤에 i에다가 1이 더해진다.

  (1로 먼저 계산하고, 2가 된다)


int i = 1, sum = 0; //동시에 int형 변수를 선언할 수 있다.

while(i <= 1000) {

sum += i++;    //sum에 sum+ i를 대입하고 난뒤 i가 +1된다.

}

System.out.println("1부터 1000까지의 합은 " + sum + "입니다.");



< FOR문 해석 : ~부터 ~까지 1씩 증가시켜서 반복>

5. 이중 for문을 이용해서 삼각형을 출력해보자. for문의 구성은  for(초기화 부분, 조건부분, 증감연산자) 로 구성된다.

(1) 상수를 클래스 전역변수로 하나 만들자. 


final static int N = 30;


(2) 초기화 부분의 변수 i는 N=30부터 시작해서, i가 0보다 클 때까지 반복한다. 1씩 내려가다가 1까지 계산된 뒤 멈춘다. 출력을 하면, 

* 이 줄바꿈하면서 총 30개가 출력된다. 바깥 for문은 줄바꿈 30줄 하는 것으로 쓰일 것이다. 그리고 j가 30부터 1까지 사용될 것이다.


for(int i = N; i> 0; i --) { 

System.out.println("*");

}


(3) 이중 for문으로서, j는 i부터 시작해서,, j가 0보다 클 때까지, j를 하나씩 빼준다.  이때, println이 아니라 별이 붙어나오도록 ln을 뺀다.

(4) 문자열이 없는 println(); 만 호출해줘서 줄바꿈이 되도록 한다.


for(int i = N; i> 0; i --) { 

// 초기화 부분의 변수 i는 N=30부터 시작해서, i가 0보다 클 때까지 반복한다. 1씩 내려가다가 0이 되면 멈춘다.

for(int j = i; j>0 ; j--) {  //j는 30일때부터 시작해 1까지 가고, 또 29부터 시작해서 1까지 가고.. 를 반복

System.out.print("*");

}

System.out.println();

}


< 해석할 때, i를 먼저 고정시켜서 해석한다. >

i가 30일때, j는 30부터 1까지 총 30번이 반복되면서 30개의 별이 붙어서 출력된다. + 줄바꿈한다.

i가 29라면, j는 29부터 1까지 총 29개의 별을 붙혀 출력된다. +줄바꿈한다.

...

i가 1이라면, j는 1개의 별을 붙혀서 출력한다.+줄바꿈한다.



6. for문을 이용해서 원을 출력하는 프로그램을 작성해보자.

- x^2 + y^2 = r^2 원점을 중심으로 하는 원의 방정식의 원리를 도입할 것이다.

(1) 처음 상수를 15로 선언하자.

final static int N = 15;

(2) for문을 i는 -N부터 시작해서 / N까지/ 1씩 증가시키면서, 줄바꿈을 할 것이다.( 총 (2N + 1) 번의 줄바꿈)

(3) 이중for문에는 j가 -N부터 시작해서 N까지 1씩 증가시키면서 ( 가로도 2N+1 만큼 차지, i 와 무관)

i를 x, j를 y로 생각하고 원의 방정식을 만든다. 만약 반지름 내부라면 "*" 를 출력하고, 반지름 밖이라면 " " 공백을 출력하도록 하자


public class Main {

final static int N = 15;


public static void main(String[] args) {


// x^2 + y^2 = r^2 원점을 중심으로 하는 원의 방정식

for ( int i = -N; i<=N ; i++) {

for( int j = -N ; j <=N ;j++) {

if(i*i + j*j <= N*N) {

System.out.print("*");

}else {

System.out.print(" ");


}

}

System.out.println();


}




}

}


<해석> 

가로, 세로 2n+1의 격자안에서 

i가 -15 일때, +15까지 총 31번을 줄바꿈 할 것이다.(N이 홀수어야 한다?)

i가 -15라면, j는 -15부터 +15까지 31번을 반복하여, 붙혀서 출력하는데, 원의방정식 내부에 *를 출력한다. 원이아니라면 공백을 출력한다.

i가 -14라면, j는 -15부터 +15까지 31번을 반복하여, 붙혀서 출력...

- j는 i에 영향을 안받고, 정해진 N에 의해, 무조건 31개를 붙혀서 출력하며, 원의공식에 따라서 원 내부에 *를 찍는다

- i는 N에 의해 31개부터 1까지 줄어들면서 줄바꿈을 한다.




7. for(;;)  /  white(true)는 무한루프 이며, break로 탈출할 수 있다.

int count = 0;

for(;;)

{

System.out.println("출력");

count++;

if(count==10) {

break;

}

}

일러강의02-선택툴-outline-CC.ai


1. 선택 툴

왼쪽의 검은 화살표(v) : 선택 도구

오른쪽 하얀 화살표(a) : 직접 선택도구


2. 기본오브젝트 그리는 방법

(1) 사각형 도구를 선택하고 드래그 하면 사각형이 그려진다. *도구를 롱클릭한다음에 오른쪽 경계에서 띠게 되면, 그 도형 그리는 도구창이 밖으로 나온다. 

<색>

(2) 왼쪽 도구툴에 면색을 더블클릭하여 색을 정한다. 바로 옆에 있는 선색을 선택한 뒤 선색을 결정한다. 이때 얇아서 잘 안보이므로, 상단에 있는 컨트롤 패널에서 Stroke의 포인트를 높혀본다. 컨트롤 패널에서도 왼쪽에 보면 면색과 선색을 직접 지정할 수 있다. 이때, 견본 색상인 (swatches)같이 정해진 것을 선택하도록 한다

(3) 마찬가지로, 오른쪽 패널중 Color패널에서 면색 or선색 사각형을 앞에 두고서 색을 스포이드로 선택할 수있고, swatches패널에서 견본색을 선택할 수 도 있다.


<변형>

(4) 검은화살표(v)를 누른 상태에서는 오브젝트 전체를 선택한다

(5) 하얀화살표(a)를 누른 상태에서는 일부 오브젝트를 선택하여, 변형시킬 수 있다. 

예를 들어서 사각형의 한 모서리만 부분 드래그하여 모서리를 선택하면 그 모서리를 조절할 수 있다. 이때, del를 눌러서 지우면, 그 점을 제외한 부분만 연결된다.


<도형 그리기> 

그리는 방법은 2가지다.  마우스를 드래그해서 그리기 or 제자리 클릭으로 크기를 직접 입력하는 방법이 있다. 드래그 하는 방법이 가장 많이 쓰인다.

이때, 단축키를 사용한다

[Shite] + 드래그 : 비율 유지하기

[Alt ] + 드래그 : 기준을 중앙으로 유지

[화살표] + 드래그 : 각 옵션 조정( 둥근사각형, 폴리곤 그릴 때 코너값, 면 갯수, 을 조절한다)


-사각형을 그리고 나서 나타나는 8개의 모서리는 boudingBox라고 한다.드래그하여 크기를 조절해도 된다.

cc버전에서 나타나는, 바운드박스 아래의 동그라미는, 잡아댕기면 모서리가 둥글게 변하는 버전이다. cs에서는 없기때문에 꺼두게 된다. 

View>Hide Corner Widget을 설정한다.


-둥근사각형을 마찬가지로 그릴때, 제자리 클릭으로 크기를 입력하면 코너값까지 입력할 수 있다. 하지만, 드래그로 그리는 도중에 키보드 위/아래 키를 이용해서 코너값을 조정하여 눈대중으로 그릴 수 있다.


-폴리곤을 드래그로 그릴 때, 화살표 위아래를 누르면 면 개수를 조절 할 수 있다.


-별을 그리면, 위/아래 화살표로는 점의 갯수를 조절할 수 있고, Ctrl을 누르면 별 꼬리의 길이 조절도 가능하다.


-마지막 플레어를 그리면, 빛 효과를 만들어주는 기능으로, 드래그 먼저 그린뒤, 다시 한번 더 클릭하여 빛이 번지는 효과를 준다.


<선 그리기>

왼쪽의 선 도구를 보자. 도형 그리는 것과 마찬가지로 롱클릭해서 도구창으로 꺼낸다.

(1)면색을 없애주자. 면색 지정하는 곳 아래에 3개 면 중 젤 마지막 [빨간 빗금 그인 것]을 선택해서 색을 없애주자.

(2) 직선, 곡선(위아래 화살표로 코너값 조정), 골뱅이(화살표로 말리는 길이 조절, ctrl로 말리는 정도, 다 그리고 난 뒤 클릭으로 반대방향으로 변형  ), 표( 사각형 갯수), 거미줄원형(나누는 각도, 선 갯수)를 그릴 수 있다.

원래 합격자 발표가 2. 7(수)인데, 하루 일찍 났다.

1차 합격자가 총 98명인데 -> 최종합격자는 64명으로 발표되었다.


※ 장학생 연수교육은 2018년 2월 26일∼27일 1박 2일간 홍익대학교 국제연수원(세종특별자치시 조치원읍 소재)


장학담당부서에서 신경써주신 선생님께 한턱 쏘로 갈 일만 남았다. (붙으면 한턱 쏘라고 하셨음;;)




인터넷에 꽤 면접후기들이 많았다. 한 포털만 검색하면 없을지 몰라도, 네이버/구글/다음 모두 검색했다.

먼가 권위있는 재단의 합격후기라서 그런지 면접후기를 모아보니 20개 가량되었던 것 같다.

부러웠고 나도 합격하고 싶었다.


일단 대박은,, 지방에서 면접을 보러온  학생들을 위해, 차비가 지원된다. 하하하;;


일단 내가 지원한 계기가 한의대생들을 위한 앱 개발로 인한 것이니, 자기소개서 요약 2분에 어플리케이션 시연까지 보여드렸다. 아마 점수를 많이 땄을 것 같았다.


결과적으로 보면, 예상질문 준비한 내용 + 여자친구에게 자소서를 읽고 날카로운 질문 부탁한 것에서 나왔다.

여러가지를 물어보셨지만, 핵심질문은 여자친구가 물어본 것에서 나왔고, 만약 준비안했으면 어버버 대었을 것이다.ㅋ

여자친구와 준비한 내용 + 비트코인을 물어볼 것에 대비해 블록체인관련 내용을 공부해간 것으로 답변하였다.

사랑합니다. 서경킴!♡


일단 면접을 마치고 난 뒤, 내 기분은 합격이다. 앞으로 4일 뒤 발표나겠지만, 일단은 합격이라고 생각하고 있다.

(겸손이 중요한데, 일단은 준비한 것 중에 나와서..)


정해진 시간까지 가면, 한 강의실에서 모두 모여있다가, 이름 불리면 문앞에서 앉아서 대기하는 식으로 합니다.

저는 앱개발로 지원원서를 넣어서, 노트북에는 제가 만든 앱 개발 동아리 홈페이지화면을, 폰으로는 앱을 시연하면서 했습니다.ㅋ





Q1. 자소서 중에 앞으로 계획중에 '모바일 차트 개발'이 있는데 이것은 구체적으로 무엇이지요?

A1. 네. 저는 일단 모든 환자가 집에서도 어떤 진료를 받았었고 내 상태는 어떤지 확인이 가능해야 한다고 생각합니다.

100세 시대에 이르러, 고령인구들이 많기 때문에, 제가 만든 어플을 발전시켜, 어르신들도 직관적으로 확인할 수 있는, 큰 테블릿 형태의 차트를 보여드리면서 진료를 하고 싶습니다.

기술적인 면에 있어서는, 요즘 잇슈가 되고 있는 비트코인에 쓰이는 기술인, 블록체인을 의료에 적용시켜려고 합니다.

블록체인에 있어서, 블록을 열 수 있는 키는, 퍼블릭키와 프라이빗 키가 있는데, 이 프라이빗키를 환자들 개인에게 주어지게 한 뒤, 집에서도 조회할 수 있는 시스템을 만들고 싶습니다.


Q2. 이미 양방의학에서는 움직임이 보이던데?

A2. 네 메디블록이라고 최근에 상장된 코인이 있습니다. 10여명의 의사와 치과의사가 기획해서, 만든 블록체인 기술이라고 할 수 있습니다. 한의학계도 마찬가지로 발빠르게 대처하고, 유용한 기술을 도입해야 한다고 생각합니다. 저는 한의학과 IT의 융합에 있어서 교량역할을 하고 싶습니다. 


Q3. 그럼 오픈 소스로 시작하나?

A3. 네. 모든 블록체인은 오픈소스로 시작하나, 단방향성의 암호화를 통해, 갈수록 난이도가 올라가기 때문에, 안정성에 있어서는 걱정할 필요가 없다고 생각합니다.


Q4. 자소서 내용 중에 고향에서 병,의원을 환자들이 불신한다고 하는데?

A4. 저는 고향에서 자라와 옆에서 지켜봤고 남해 인구의 70%가 노인들인데, 그들이 호소하는 통증이 만성질환과 노인성질환이기 때문에, 더 건강하게 치료할 수 있는 것은 한의학이라고 생각합니다. 항생제, 진통제로 인해 내성을 만들어낼 것이 아니라, 침과 약침으로 통증을 줄일 수 있다고 확신하고 있습니다.


Q5. 아니, 한의학이라고 해서 신뢰를 할 것이 아닐텐데?, 그냥 고향의 사정상 낙후된 시설과, 고령 의사때문이 아닌가?

A5. 네. 제가 적은 병의원은 한의원까지 포함시킨 것입니다.


Q6. 그런 말 없는데?

A6. 네 제가 잘못 적은 것 같습니다. 그리고 실제 상황은 말씀하신 것이 더 정확하다고 할 수 있습니다.


Q7. 한양공대를 다니다가 적성이 안맞아서 나갔는데, 앱개발을 했네?

A7. 네 제가 전공한 것이 공대이긴 하나, 정보통신으로서, 전기/회로 등의 추상적인 개념만 배웠습니다. 저는 이과적인 성향으로, 자판기에 500원을 넣으면 500원짜리 음료수가 나와야하는 사람입니다. 

지금은 제가 자발적으로 하고 있고, 코드를 작성해서 원하는 결과물들이 바로바로 나오니 큰 성취감이 있어서 좋습니다.


Q8. 결과적으로 도움이 된거네?

A8. 네. 사실 한의대생들이 많이 도전하고 있는 분야이나, 진입장벽이 너무 높다 보니까, 많이들 실패하고 있습니다. 그러나 저는 비슷한 분야에 있었고, 약간 더 익숙하기 때문에 진입장벽을 좀 더 쉽게 허물 수 있었던 것 같습니다. 좋은 경험이었습니다.





일단 적고나니, 상당히 전문용어들이 많이 등장하는데, 이런면에서 자소서를 썼었고, 심사위원분들과 의사소통이 되었으니, 일단 합격이라고 생각하겠다.



아래는 내가 모은 면접후기들을 년도별로 분석한 것이다. 아마 2019 장학생을 노리는 친구들에게 엄청난 도움이 될 것이다.




면접 준비 : 딱 10분, 

cf) 발표일 (30일 1차->) 8일or 13일 or 17일날 아침10시, 2월 26~28일 or 2월 26일부터 28일 연수, 면접보러갈 때 차비도 지원.


[2009]

5분 자소서, 5분 면접으로, a4에 반복해서 외웠다.  

1. 서있는 상태에서 인사하니까 면접관이 제대로 미동도 주지않았다.


1. 에세이에서는 현재 하고 있는 활동과 앞으로 하고싶은일, 봉사활동 관련이 가장 도움 되었음.


2. 봉사활동 중의 내용을 물었다. 해외봉사 가고싶다고 하니까, 해외봉사랑 선교의 차이점을 물었다. 그때부터 꼬리에 꼬리를 무는 질문공세


3. 사회에 나가서  어떻게 다시 장학재단에 기부할 것인지



[2011]

5분 에세이, 5분 면접, 사회계, 인문계, 예체능, 자연계 방이 나뉜다.

1. 에세이요약은 잘 할 것

2. 에세이 위주로, 날카로운 질문


[2012]

호의적이고 가벼운 분위기는 아니었고 적당히 무거운 분위기였어요. 

기본적으로 서류심사 때 쓴 에세이를 요약해서 발표한 다음 면접관님들의 질문에 답변하시는 형식입니다. 

다른 장학생 친구들 이야기를 들어보니 


1. 시사적인 것에 대한 질문을 많이 받았다고 하는데, 저는 그런 질문은 없었고요, 


2. 제 꿈이 제 전공과 직접적인 관련이 있는 방향이 아니라서 그것에 대해 많이 질문하셨습니다. 



[2013]

1. 자신이 자소서에 더 강조하고 싶은 부분과 추가하고 싶은 부분

 -  "평창 동계 스페셜 올림픽에서 막 올라온 홍콩DAL 윤혜원입니다."라고 시작

2.  대형마트 의무휴업에 대한 내 경영학적 관점을 아주 간단히 요점만


1. 시사적인 질문으로,  '사면'에 대해 어떻게 생각하는지 물어봄

2. 웅변한 적 있는가, 대학 후의 미래에서는 무엇을 하고 싶냐, 하고싶은 말 있으면 해라.

3. 연수후기로 '우리는 빛쟁이' -> 사회에 나가서는 베풀줄 알아야한다. 


1. 내가 쓴 에세이 요약

2. 향후계획에는 나의 꿈을 구체적으로 적었다. 

3.안녕하십니까, 점심시간 전 마지막 순서인 원경수입니다"라고 크게 인사했다.  기분좋게 웃으시면 앉으라고 하셨다.

4. 에세이에 못적은 말 하기 

5. "세종대왕상은 유네스코에서 지정한, 문맹률을 낮추는 데 기여한 개인이나 단체에 주는 상"

   이 말은 절대 에세이를 쓰기 위해 찾아쓴 것이 아니라 평소에 지인들에게 하고 다니는 말을 에세이에 쓴 것이라 말씀드렸다.

6. 마지막엔 여교수님께서 하고 싶은 말을 해보라고 하셨다."제가 생각하는 지도자는 앞에서 이끄는 리더(Leader)만 지도자가 아니라 뒤에서 밀어주고 받쳐주는 것도 리더라고 생각한다"



1. 그 과는 무엇을 배우나요, 나오면 뭐하지?


1. 에세이를 발표해라고 지시한다.

2. 학교에 대해서 말해봐라.

3. 향후계획 적은것에 대해서 구체적으로 말해봐라.

4. 마지막으로 할말


1. 학과에 들어간 이유 -> 솔직하게 말했더니 '지도력이 부족하다!' -> 인정하기



[2014]

당일까지 에세이 다시 보기, 중요부분 따로 정리, 교통비 지원

1. 헌혈많이 한 것을 확인서로 냈더니 , 헌혈을 많이 한 계기

- 영화표 받을라고 갔었는데 -> 나중에는 간호사와 친해져서,-> 사회 구성원으로서 사회에 기여할 수 있는 기분을 느낄 수 있어서 좋았다. 

2. 복수전공을 한 계기

3. 마지막으로 하고 싶은 말


1. 1분 자기소개서 준비했다. 특히, 구체적인 계획과 목표가 중요했던 것 같다. 예를 들어, 지금은 없지만 반드시 XX자격증을 준비할 것 입니다.

2. 연관관계 없는 것EX>선생님과 신문방송 복수전공

3. 미소와 바른 예의



누나에게 도움을 청해서 면접의 자세들을 많이 배웠다. 노크후 문을열고 가볍게 묵례하고 안녕하십니까 외치고 의자옆에서서 다시 인사하고 자리에 앉으면 된다고 면접을 한번도 본적이없어서.. 어떻게 들어가고 의자에 언제 앉아야하는건지도  잘몰른 나에게 누나는 잘설명해주었다. 

문을 똑똑똑 두드렸는데 안에선 소리가안났다. 또 똑똑똑 두드렸는데 아무소리가 안났다. 이상하다 싶어서 그냥 문을 살짝 열었는데 남자 두분이서 무거운 표정으로 서류를 읽고계섰다. 엄청 후달달 떨려야하는데 하나도 떨리지 않는것이었다. 연습한데로 인사하고 앉았다. ㅎㅎ 많은 연습을 했으니 질문을 해주세요!! 하는 표정으로 심사관들을 보고있었는데 심사관들은 서류에만 시선이 가있고 입으로만 질문을 하셨다.


1. 면접대기실에서 기다리는데 사람들이 가슴을 툭툭 치거나 한숨을 쉬거나 먼산을 보고있거나 면접준비종이등을 보느라 아주 분위기가 무거웠다


2. 우리들이 에세이 내용은 이미 다 읽어봤으니 에세이 내용은 말하지마시고 지금 학교생활에있어서 기억에 남는것들을 말해보라고 하고 또한 에세이 내용을보니 봉사활동만 기입해서 다른부분에 대하여는 점수를 줄수 없다고 말하였음 .  받을수 없다라는 이야기를 듣고 아.. 망했구나 생각했다. 봉사부분만 쓰게된이유를 설명하고 설명하고나니 에세이부분만 준비해갔는데 다른 질문을 하니 당황


3. 마지막질문을 학교성적은 얼마나 나와요? 라고그래서 4.41나옵니다 라고 말했더니 면접관이 공무는 좀했구먼 이렇게 말하고 수고했어요 나가봐요 이래서...



[2015]

에세이 요약한 내용을 외우고 고치고 외우고 고치고..전날 내 발표를 들은 친구가 전달력이 좀 부족한것 같다고 해서 싹 다시 고치고 외웠다.



1. 나의 단점에 대해 말하기

2. 대외 활동안한것에 대해 물어봄


1. 처음 서류냈던 자료들 말고 혹시 자신이 지도자가 되는 과정에 겪엇던 일이나 생각들을 3분안에 말해보라고 하셨습니당

즉.. 글은 다 읽어봤으니까 딴 경험 얘기해라 이런 의도같았어요 ㅋㅋ (하루에 130명 정도의 학생들 면접을 하니 짧게 하는걸 원하시더라구요ㅜ)

저는 인화하면서 경험들을 얘기했어요~ 친구들이랑 의견이 맞지 않았던것들, 계속 해야하는데 그냥 하기 싫었던 슬럼프 극복들, 이런것 얘기하면서 나중에 제 꿈인 환경컨설턴트 얘기 꺼내고 지금 대인관계나 커뮤니케이션 능력들이 향상되 가는것이 컨설턴트의 발판이 될것이다.. 이런식으로 .. 대답했던 것같아요


2. 두번째 질문은 제가 학교에서 들어간 동아리가 기계동아리인데 제 전공은 환경인 것에 대해 태클(?)이 들어왔습니다 ㅋㅋ

너무 다른것이 아니냐고 -> 만큼 정반대로 다르기 때문에 배울것이 많았다고 얘기했어요~ 요즘 정반대의 것을 결합해서 뜨고있는 아이디어들 많잔아요..? 저는 실제로 동아리에서 설계프로그램인 솔리드웤을 배웠기 때문에 그거 애기하면서 이번 해외캡스톤 디자인대회에서 설계를 맡게되었다고 말씀드렸고,.. 결론은 나의 부족한 것을, 우리 학과에선 배울수 없는 것들을 더 채울수 있는 기회였다고 한거같아요~


3. 세번째 질문은 제가 전국 청소년 발명대회에서 상탔던 아이디어에 대해 여쭤보셨어요그걸 왜만들었냐? 제가 선배들과 대화중 이부분을 이렇게 하면 좋을것 같아서 만들어보았다.  

직접 실험해봤냐? 아뇨 제작하는데 돈이 많이 들어서 직접 시행은 못했습니다.실험도 못해봤는데 그럼 그게 좋은 아이디어인줄 어떻게 아냐? 그리고 너의 전공이 아니기에 더 실험 못해본거 아니냐?

뭐 이런식의.. 무서운질문들 ㅋㅋㅋ 하지만 이번에 해외캡스톤 디자인 대회가 제 전공을 살려서 새집증후군 제거제 물질 만드는 주제이기 때문에 저번 경험을 바탕으로 이번엔 제 전공을 살려서 주제를 잡았습니다. 뭐 이렇게 설명했어요. (이 때 피피티로 아이디어 도면뽑아 간거 도움됬어요)


4. 네번째 질문은 자신의 어떤 부분이 한국지도자육성장학생이 되기에 타당한것 같냐고 그렇다면 이유는 무엇인지?

하 이부분은.. 대인관계에서 제가 느낀것 남을 바꾸는 것 보다 나를 바꾸는 것이 더 쉽다. 인데요 이거 얘기 하면서 상대와 부딪히는 부분을 바꿔나가고 있고.. 일을 하다 보면 하기 싫을 떄가 있는데 내가 행하지 않으면 실체가 되지 않는다. 오직 행한것만 결과로 남아지게 된다. 라는 제 생각을 말씀드렸던것 같아요..


5. 다섯번째 질문은 현재 돌아가신 여성분 중에 존경하는 사람이있는지, 그사람의 책은 무엇을 읽었고 어떤 부분을 존경하는지 말해보라고 했습니다. 또 그 부분을 닮기 위해 어떤 노력을했는지도 말해보라고했어요!--> 저는 걍 고민없이 1초만에 유관순이라고 했어요. 그냥 당황하면 안될거같아서 제일먼저 생각나는 사람 말하고 마치 23년동안 존경해온듯 말했어요 ㅋㅋㅋㅋ 책은 뭐 3.1절 책 있겠지 하면서 .. 초등학교 때부터 3.1절 에 대한 책을 읽으며 유관순의 희생정신과 리더쉽을 존경해왔다고.. 또 희생정신을 닮기위해서 인화로 봉사활동은 물론 대인관계에서도 제가 회장의 입장이기때문에 먼저 희생하고 들어가야한다고 말씀드렸습니당.




[2016]

안심하기도했지만 하루전에 준비한 나는​조바심나서 A4 5장 질문16개분량을 계속 암기했다. 사실 암기라해도 자기소개서위주로 질문하실 것같아서

처음에 자기소개(1분가량),


1. 자기소개서를 보면 분량은 많은데 활동이 적은것같다. 아닌가? 아니면 반박해보세요.

- 나는 1학년2학기에 대외활동 2개, 2학년1학기에 대외활동 1개, 학생회활동, 봉사활동 이 있었는데, 이렇게 했는데도 면접관님이 활동이 적다고 하신거보면..적은거겠죠?.... 분발하겠습니다 !!


3. 마지막으로 어떤 지도자상이 되고싶나?




1. 대학총장님 이름 ㅋㅋ



우와... 막 ppt를 스케치북에 붙혀서 오신 분들도 있고, 교사포스 나시는 분은 강의처럼 진행을 하시더라구요. 저는 그냥 대학생 같았구요 ㅠㅠ.

아직도 기억에 남는 질문들이 몇가지 있는데요. 그중


1. '왜 학생이 장학금을 받아야 하나요?' 라는 질문은 예상했음에도 불구하고 막상 말하려니 어렵더라구요. 



전국 예비지도자를 희망하는 대학생들 가운데 100명안에 들었다. 

1월 15일까지가 서류제출 마감이었으니까 15일만에 난 합격자 발표다. 




2차 면접심사는 100명중에 30명을 잘라내고 70명만 남기는 심사다. 즉, 5인 1조에서 1명에서 2명이 잘려나간다.

북매라고,, 장학금만 알아보는 친구가 있는데,, 많이 잘라내는 것은 아니라고 했다.


2차 심사는 바로 2일 뒤인, 서울 교대 속의 한 건물에서 이루어진다.

아래 사진처럼 조가 배정되고, 그 시간까지 입실하게 되면, 한 강의실에서 대기하다가

3명의 심사위원님들 앞에서 혼자 자소서요약 2분내외 + 추가 질문이 이어지게 된다.



태어나서 처음보는 면접이라, 인터넷에 돌아다니는 모든 후기를 다 찾고, 년도별로 정리하고, 예상 질문을 만들어서 준비했다.

모은 자료는 다음 글에 게시할 것이다.




[본과3] 2018 한국지도자육성재단 장학금 신청하기



12월 28일 정도에 전국 대학교 홈페이지 장학분야 공지사항으로 올라온 것을 확인했다.

예전에 민족의학신문의 기사에서 논문을 쓴 여학생이, 이 재단의 장학생이라는 문구를 보았다. 먼가 지도자육성하는 권위있는 장학재단인가 싶었다.

관련 조건을 보니 대박이었다.


고향에서 나오던 장학금을 선배로서 4번 받았으니, 후배한테 양보해주자는 통화를 받고, 아쉬운 마음이 큰 상태에서 관련 항목들을 잘 살펴보았다.



1. 장학금액 : 등록금 전액(수업료) + 학업보조비(연 200만원)

2. 지급기간 : 2년(정규학기 4개 학기 이내), 4학년의 경우 일반대학원

진학시 1년간 장학금 계속지급

4. 추천인원 : 대학교별 재학생수 비례하여 배정

5. 자격조건

: 교내ㆍ외 활동을 통해 창의적인 사고와 도전정신으로 우수한 성과를 창출 한 경험이 있거나 투철한 봉사정신으로 리더십을 발휘한 학생

- 매학년 30학점 이상 이수한 자(역학기 이수자는 15학점 추가)

- 전체학기 백분위 성적이 85점/100점 이상인 자(2017년도 동계 계절학기 제외)

*가산점 항목

* 대학교 총(단과대)학생회장/부회장

* 방송사/학보사 국장, 동아리 회장

* 각종 학술논문공모전 입상자

* 전국규모의 웅변대회 입상자

* 국가 및 지자체, 공공기관으로부터 선효행, 봉사상 수상자

* 기타 특별한 재능 또는 모범적 활동으로 학교 및 지역사회의 명예를 드높인 학생(대학신문, 기타 언론 등에 보도된 내용 첨부)



관련된 항목만 추려보았다. 역시 뭔가 지도자 지도자 하니까,, 거의 가산점 먹는 학생회장, 부회장만 신청하겠구나 했다. 그리고 학교방송국 회장정도 지원하지 싶었다. 논문도 없고 웅변은 안하고,, 봉사도 거의 안하기 때문에,,;;


근데 마지막 항목을 보자. 얼마전에 '남룡북매'라는 한의대최초 앱 개발 팀을 만들어서, 한의학 대표언론인 민족의학신문에 기사가 난 적이 있다.

내가 인터뷰한 기사를 캡쳐하고, 원서를 작성하기로 하였다.


제출해야할 서류가 너무 많았다. it기업에서 인턴하고 있었는데, 휴가를 냈다.



그리고 학교당 1명에서 많게는 3명이 지원할 수 있다.

지도교수님도 만나야하고, 지도교수의 추천서도 작성되어야한다. 그리고 한국장학재단의 소득분위 확인서까지 있어야한다.
최소 3일정도는 작성하고 서류만족시키는데 쏟아야한다.
학과의 교학과의 담당자의 사인이 필요하고, 학교전체 장학부서에 가서 최종 서류를 제출해야했다.

근데 1월의 나주... 엄청난 한파에 저 자격을 가지고 있으면서, 지원할 친구는 드물 것 같았다. 먼가 촌구석 지방대의 이점을 강력하게 이용할 수 있는 절호의 기회일 것 같았다.

휴가를 내고 서울에서 SRT를 타고 내려가기 전에 지도교수님을 비롯해서 교학과, 장학부서 모두 미리 약속을 잡고 아주 바쁘게 움직였다.


장학담당 선생님께서, 각종 서류를 스캔도 해주고, 잘될거라고 응원해주셨다. 왠지 우리학교에 이 장학재단의 장학생이 한번도 배출 안되었던 것 같다.

잘 보내줄테니, 붙으면 한 턱 쏘라고 하셨다.ㅋ

1. 깃헙 회원가입

첫화면에 보이는 곳에 모두 작성하고 singup을 누른다. 다음화면에서는 개인공간이 필요하다면 결제하라는 것이 나오는데 무시하고 submit해준다.

등록한 이메일로 들어가서 verify해준다.


2. 프로필 꾸미기

우측 상단에 Profile에 들어가 edit profile을 선택한다.

Name / 사진업로드 / Bio(자기소개) 정도만 적어서 update해준다.


3. Git(깃) 설치하기

구글에 git download 를 검색해서git for windows 사이트에 들어간다(http://gitforwindows.org/)

download버튼을 눌러 다운받고 설치한다.


4. 깃 저장소 만들기

프로필 왼쪽의 + 버튼을 눌러서 Create a new repository 페이지에 온뒤 repository name만 적어준다. 설명은 안적어도 된다. 바로 create


5. 저장소에 commit 준비 

빈 폴더를 만들고, 해당폴더에 터미널을 열어줘야한다. 윈도우의 경우 해당폴더에 우클릭하면, git BASH 모양이 뜰 것이다.

나같은 경우 안드로이드 프로젝트 폴더에 GitTest라고 만든 뒤, 폴더에서 우클릭하여 Git BASH를 띄웠다.

여기서 명렁어 git init을 치면, 깃을 사용할 준비가 된 것이다.(master)표시가 나옴.


 -git init


이제 github 저장소로 가서, 서버에 원격위치를 알려주는 명령어를 저장소<code>탭에서 복사해 온다.


 -git remote add origin https://github.com/is2js/test.git


그 다음 현재 git에 저장된 상태를 알려주는 git status를 쳐본다.  아직 커밋한것이 없다고 뜬다. 커밋하지 않았으니.. 커밋은 의견제공 정도다.


-git status


6. 파일 추가(add)하기(git 서버에  add)

지정된 폴더에 아무 파일이나 만들어준다. 교재대로, test.php를 하나 만들어준다. 그리고 다시 Bash에서 git status를 쳐보자. 

-git status


그럼 빨간색으로 test.php가 뜰 것이다. untracked라고 해서 아직 관리하지 않는 파일을 의미한다. 이 파일을 git서버에 add해주자.  또는 git add . 을 쳐서 모든 파일을 add해주자.


-git add test.php or git add . 


다시 git status를 쳐보면 초록색으로 add된 new file이 뜬다. 이제 여기서 test.php를 폴더에서 수정해보고 다시 git status를 쳐보자. 빨간색으로 수정되었으니 새로 add하라고 뜬다.  git add . 을 쳐서 다시 관리대상으로 만들자


7. 커밋(의견남기기)하고 푸쉬(github에 저장하기)

(1)커밋하기 전에 git에 자신의 정보(email과 name)를 알려주어야 한다.


-git config --global user.email "is2js@naver.com"

-git config --global user.name "is2js"


(2)이제 커밋을 해보자

-git commit -m 'test(의견)'


(3) 처음에는 master라는 브런치를 가진다. 그것을 이용해서 github에 push(저장)하는 것이다. 아래 명령어를 치면 github로그인 정보를 입력하도록 뜬다. 입력하고 repository에서 확인해보자.

-git push -u origin master


8. 깃허브 소스관리

(1) 기존 파일을 수정한 뒤, git status를 해보고, modified가 확인되면, git add . 으로 다시 git서버에 add해보자.

(2) 다시 커밋(의견)을 하고 푸쉬(깃헙에 저장)를 해보자.


-git commit -m '2th test'

-git push -u origin master


(3) 깃헙 사이트에서 commits를 확인해본다.


9. 브런치

브런치는 복사본은 아니나 임시저장소 같은 느낌

(1) git checkout -b beta 라고 쳐서, beta라는 이름을 가진 브런치를 만들어서 이동한 뒤(생성과 이동이 동시에 됨)

(2) git branch 를 통해 branch상태가 master에서 beta로 이동한 것을 확인 할 수 있다.

-git branch


10. 새 브런치 beta에서 파일을 새 파일을 커밋, 푸쉬 한

(1)GitTest폴더에 새로운 파일을 하나 만든다. test2.php 

(2) git status를 통해 확인 후, add . 하고, 커밋으로는 베타브런치임을 알려준 뒤, 푸쉬 해준다. 푸쉬할때는 새로운 branch이름으로 푸쉬해준다.


-git status

-git add .

-git commit -m 'beta branch'

-git push -u origin beta


(3) 깃헙사이트에서  Branch 선택창에서 beta를 선택해 확인해본다.


11. 실제 사용하는 브런치인 master로 옮기기(merge)

(1) 먼저 터미널에서 git checkout master를 통해 master브런치로 넘어온다.


-git checkout master


(2) git merge beta 를 입력하면, beta브런치에 있던 것들이 모두 master로 이동해온다.(git 서버에만 옮겨진 것임)


- git merge beta


(3) 이제 깃허브에도 적용해주기 위해, push를 해주자.(add(git)->commit + push(github), merge(git)->push(github))

- git push -u master 


(4) 사이트에서 beta브런치에 push한 test2.php가 master브런치로 옮겨가진 것을 확인한다.

[프로젝트 : HelloProject ]


1. 객체지향프로그래밍(Object Oriented Programming)

-프로그램을 객체들의 모임으로 구성한다. Object(객체)가 모든 것이다.

-이에 비해 c언어는 명령형 프로그래밍으로 취급한다.


2. Class는 Object(객체)를 만들어내는 틀이다.

- 클래스는 설계도의 개념으로 ---> 실제 객체들1,2,3을 만들어낸다.

- 클래스 안에는 객체들의 공통된 [ 속성(Field, propery)-값을 가지는 명사 ] 와  [ 메쏘드(Method)-어떤행위를 하게하는 동사 ]들이 선언된다. 

  객체가 만들어질 때, 클래스에서 선언된 [속성]과 [메쏘드]를 가지고 있게 된다.


3. 자바에서 실제 구현

(1) 클래스 생성

public class Avante {


private String color; //필드(속성)


public void openDoor(){ //메쏘드

System.out.println("문이 열렸다");

}


}


(2) 객체 생성 : 메인매쏘드(실행시킬 때, 필수적으로 만들어주는 것) 안쪽에서, 객체를 생성해본다.


Avante avante1 = new Avante(); 

- new라는 예약어Avante();라는 생성자를 통해 객체가 만들어진다. 여기서 avante1은 변수다.

- 객체들이 클래스에서 만들어지면, 각 객체는 새로운 것이다. 그래서 new라는 예약어를 사용한다.


Avante avante2 = new Avante();

- 변수 avante2 , 예약어 new, 생성자 Avante();를 통해 새로운 객체를 만들었다.

- 변수들이 실제 객체를 반영한다. 이를 변수가 객체를 '참조한다'라고 한다.

- 이때, Avante();라는 부분은 생성자(Constructor) 부분이다. 실제로 객체를 생성하는 부분이다. 


avante1.color = "빨간색";

- 첫번째 객체가 클래스에 선언된 필드를 이용했다. 클래스에서는 private String으로 선언한 문자형 변수다(초기화 없이 변수선언한 것과 동일). 이걸 필드라 하고 사용방법은 위와 같다.


(3) 실습 [프로젝트명 HelloProject ]

-Hello라는 클래스를 메인함수를 포함해서 만들어준다. 간단한 출력문을 기입하고  ctrl+s로 저장하고  실행시킨다.

-이제 본격적인 클래스를 만들기 위해 다시 src에서 클래스를 메인함수를 포함해서 만든다.

- 클래스가 가지는 필드와 메쏘드 중, 필드를 추가시켜본다. 

public class Avante {


String color; //필드 선언

void run() { //메쏘드 선언

System.out.println("아반테가 달려요.");


}

-이제 메인매쏘드에서 객체를 생성해본다. 객체 생성시는 new라는 예약어와, 클래스명과 동일한 생성자 Avante();를 통해 생성한다. 객체는 언제나 새롭게 만들어지는 것이다.

new Avante();


- 이제 생성된 객체가 실제로 사용이 되려면 Avante타입의 변수를 선언해서 참조해야만 사용가능하고, 계속 사용할 수 있다.

Avante a1 = new Avante();


- 새로운 객체를 만들어보자. 참조할 변수명은 달라야한다

Avante a2 = new Avante();


- 각 객체에 필드를 이용해서 색을 넣어보자.

a1.color = "빨간색";

a2.color = "파란색";


- 이제 출력하는 객체를 이용해서 클래스내부의 메쏘드를 호출해보자.

a1.run();

a2.run();


- 이제 필드를 사용한 객체를 출력해보자.

System.out.println("a1의 색은?"+a1.color);

System.out.println("a2의 색은?"+a2.color);


* (=)대입연산자는 오른쪽값을 왼쪽에 넣어주는 의미이다.

연산자는 사칙연산과 %(Modular, 나머지)연산이 있다.  [프로젝트명 : Tutorial4]


1.  초를 입력받아 몇분 몇초인지 계산하는 프로그래밍을 해보자.


(1) 메인클래스 내부에, 메인함수 밖에, 1000초를 의미하는 상수를 선언해보자. 

final static int SECOND = 1000;


(2) 1000초를 몇분 몇초로 만들려면 [ 분 : 1000초/60,  + 초(60초를 넘지않는 나머지수) : 1000초/60의 나머지] 이다. 메인함수안에 변수를 선언해주자.

int minute = SECOND / 60;

int second = SECOND % 60;

(3) 출력해보자

System.out.println(minute + "분 "+ second + "초");



2. 증감연산자(++, --)를 활용하는 프로그래밍 해보자. 


int a= 10;

System.out.println("현재의 a는 " + a +"입니다.");

a++;

System.out.println("현재의 a는 " + a +"입니다.");


(1) 만약 출력하는  내부에 ++를 입력하는 경우는 2가지로 나뉜다

1) a앞에 붙어있는 ++a : 출력시 a+1이 출력된다.

2) a뒤에 붙어있는 a++ :  출력이 된 이후에 +1이 되는 구조-> 출력식에는 +없이 그냥 a가 나온다.


System.out.println("현재의 a는 " + ++a +"입니다.");

System.out.println("현재의 a는 " + a++ +"입니다.");


3. 모듈러 연산자(%)를 실습해보자.

System.out.println(1 % 3);

System.out.println(2 % 3);

System.out.println(3 % 3);

System.out.println(4 % 3);

System.out.println(5 % 3);

System.out.println(6 % 3);

(1) 위 식을 해보면, 3으로 나눈 나머지가 나온다.



4. 다양한 연산자(==, >, <, &&, ||, ! )에 대해서 알아보자.


(1) 출력식에 괄호를 넣어 ==연산자로 비교하면, true  혹은 false값이 나온다.

int a = 50;

int b = 50;

System.out.println("a와 b가 같은가요?" + ( a == b ));


(2) 등호를 넣어보면 false값이 출력된다.

System.out.println("a가 b가 큰가요?" + ( a > b ));


(3) 이제 2가지 연산자를 동시에 사용하기 위해 and연산자( &&) 를 사용해보자.

System.out.println("a가 b와 같으면서 a가 30보다 큰가요?" + ((a == b) && (a > 30) ));


(4) 등호연산자의 식을 괄호로 묶어서, 앞에 null연산자 (!)을 붙혀보자.  (안드로이드에서는 !=,  자바에서도 사용은 가능한 것 같다 출력은 정상)


System.out.println("a가 b와 같으면서 a가 30보다 큰가요?" + !( a==50 ));


5. 삼항연산자( 조건? 참 : 거짓)의 형태를 숙지하고 프로그램을 작성해보자. (삼항연산자를 통해  두 숫자중 최대값 구하기)

 * 함수는 반환형 함수이름 ( 매개변수) {} 로 구성된다


(1) 간단하게 함수를 만들어주자. 메인함수 밖에서 만들어야한다.  int형 a와b를 받아서 둘중에 더 큰 수를 반환하는 함수 int max()만들자.

(2) 내부에는 int형 변수에다가 (조건)? 참 : 거짓;에 해당하는 내용을 넣고, 그 값을 return하자.

int max(int a, int b) {

int result = (a > b)? a: b;

return result;

}

(3) 메인함수에서 만든 함수를 사용해보자.


int x = 50;

int y = 60;

System.out.println("최대값은 " +max(x,y) +"입니다.");


(4) 이때, *static이 붙은 함수는 클래스 내부에서 사용되는 함수다. static인 메인함수에서 max함수를 사용하려면, max함수에도 static이 붙어있어야한다!(static은 nonstatic을 사용할 수없음)


static int max(int a, int b) {


(5) 출력해보면, 최대값이 사용된다.


6. Math라는 클래스속의 거듭제곱 함수pow()를 이용해서 거듭제곱 연산프로그램을 작성해보자.

(1) 계산을 위해 double형(실수형) 변수를 선언하고, 거기다가는 Math클래스.에 있는 pow()매쏘드를 이용해서 3.0의 20.0제곱을 입력하자

(2) 출력시에는 (int)로 형변환하여 정수로 나타내자.


double a = Math.pow(3.0, 20.0);

System.out.println("3의 20제곱은 " + (int) a +"입니다.");

1. 변수관련 상식

-자바에서는 변수를 초기화를 하지 않으면 사용할 수 없다(안드로이드는 가능)

-정수 변수만 하더라도 short, int, long으로 다양하다

-정수안에 실수를 넣게 되면 정수부분만 저장이 된다.

[Tutorial2]에 이어서, 


(1) 메인클래스 메인함수안에  int a= 0.5;를 넣어본다. 오류가 난다 -> int a = (int)0.5; 으로 형변환 시켜서 대입하고 이상태로 출력해본다. -> 정수부분인 0만  출력된다. 

즉, 소수점 뒷부분은 제거되고 저장된다.

(2. 이러한 정수부분만 저장되는 특징을 이용해서 -> 실수값의 반올림에 사용한다.

(3) 실수값에 0.5를 더한 뒤, 정수형으로 형변환한다. 만약 실수값이 0.5이상이라면 0.5가 더해져서 정수부분이 1만큼 올랐을 것이다. 

즉, 반올림한 값 = (int) (실수 + 0.5);


double b = 0.4;


int a = (int) (b+0.5);

System.out.println(a);



2. 자료형 : 나에게 필요한 데이터 타입을 말한다. [프로젝트명 : Tutorial3]


자료형은 원시형과 비원시형이 있다. 원시자료형 같은 경우, java에서 기본적으로 사용되고 있는 boolean, char, byte, short, int, long 등 이 있다.

비원시 자료형인 같은 경우, 원시자료형을 묶어서 만든 것이며, 단독의 자료형처럼도 많이 쓰인다.

다른 프로그래밍 언어에도 이미 존재하는 자료형이 많다. 하나의 문자를 의미하는 char형 외에, byte short, int long, float, double 모두 겹친다

c언어와 차이점은, boolean형과 String형 정도이다. 특히, String형은 내부적으로 substring 등의 함수를 제공하여 활용도가 높다.


(1) double형을 이용해서 평균을 구하는 실습을 해보자. 프로젝트를 만들고, src에서 우클릭하여 class를 소스코드를 만들고 메인매쏘드를 자동으로 추가해준다.

double a = 10.3;

double b = 9.6;

double c = 10.1;

System.out.println( (a+b+c)/3);


(2) 아스키코드 기반의 char형을 사용해 a부터 z까지 출력해보자. 간단한 반복문이 등장한다. 

char형 변수를 i++로 1씩 더해가면, 아스키코드 기반으로 컴퓨터 내부적으로 a->b->c 순서대로 대입된다. 

이때 문자는 케릭터형에 문자를 대입할때는 '   ' 를 통해서 대입한다.


for(char i = 'a'; i <= 'z'; i++) {

System.out.print(i + " ");

}


(3) 10진수를 8진수나 16진수로 바꾸어 출력해보자. 

8진수로 출력하려면, println대신 format으로 출력하고, 내용에 있어서 10진수를 8진수로 문자열상에서 바꿔주는 [형식지정자 %o ]를 넣어준다. 그리고 뒤에 콤마를 찍어 %o자리에 들어갈 10진수 변수를 넣어준다. format같은 경우,  한칸내리는 기능이 없기 때문에 문자열에 \n도 붙혀준다.  

마찬가지로, 16진수는 형식지정자 [%x]를 사용해서 출력해준다.

int a = 200;

System.out.println("10진수 : "+a);

System.out.format("8진수 : %o \n", a);

System.out.format("16진수 : %x \n", a);


(4) String이라는 내부적으로 class에 의해 구현되어있다. 그 클래스 안에 포함된 substring함수를 활용해보자. 

아래 문장을 출력하면 Daisy와 isy가 출력된다. Stirng의 변수.를 이용해서 substring을 호출하는데,


첫번째 숫자는 시작할 문자 선택이다. Daisy에서, D가 0번째이고, a가 1번째, i가 2번째 ... 이렇게 나간다 d부터 0을 대입해 세면 된다.

두번째 숫자는 몇번째 자리까지 출력할 것인지 선택이다. 햇깔리게도, d가 1번째로 시작한다. a가 2번째자리, i가 3번째자리

[ 즉, substring에서 0부터 세서 시작문자를 선택하고, 1부터 세서 끝날 문자를 선택하면 된다. ]

String name = "Daisy";

System.out.println(name);

System.out.println(name.substring(2, 5));



+ Recent posts