본문 바로가기

프로그래밍 일반/JAVA

[C++/JAVA] 연산자부터 메소드까지

메소드 이전에 연산자가 있습니다.
연산자는 산술(+-*/%)연산자, 비교(> < =)연산자, 논리 (&&, ||, !)연산자, 단항연산자(i++, ++i)가 있습니다.

 

여기서 비교연산자를 통해 True이냐 False를 판별하게 됩니다.

비교조건문을 가지고 if문을 만들게 됩니다.

if(조건문){
실행코드;
} else{ 
실행코드; 
}

여기서 조건문이 참이면 if문이 실행되고, 거짓이면 else가 실행됩니다.

조건문의 변형
조건문은 중첩될 수 있습니다

if(조건문){ 
if절이 참이면 실행하는 구문;
 if(조건문) { 
 if절이 참이고, else if절이 참이면 실행하는 구문;
 } 
}else{ 
if절이 거짓이면 실행하는 구문 ;
} 


조건절은 또한 연속적으로 만들 수 있습니다.

if(조건절){ 
if절이 참이면 실행하는 구문;
}else if(조건절){ 
if절이 거짓이고, else if절이 참이면 실행하는 구문;
}else{ 
위의 조건절이 전부 거짓일 때 실행하는 구문;
}



그런데 이렇게 중첩된 조건문을 간편하게 만들어주는 것이 논리연산자입니다.

if(조건문 && 조건문){ 
 실행코드;
}else{ 
} 
//이 구문은 위의 중첩된 조건문과 같습니다. 
if(조건문 || 조건문){ 
 실행코드;
}else{
} 
//이 구문은 연속된 조건문과 같습니다. 


그런데 연속된 조건절을 switch-case구문을 통해 간편하게 만들 수 있습니다.

Switch(값){ 
case 1 : A구문; break; 
case 2 : B구문; break; 
case 3 : C구문; break; 
default : D구문 
} 


여기서 중요한 점은 switch안에 case는 반드시 정수형식(실수X)이어야 한다는 점입니다.
각 경우에 대응하는 값과 switch문에 기술한 값을 비교하는 상등연산('==')을 수행하기 때문입니다.
case문은 일종의 '팻말'입니다. 수행될 코드의 위치를 단순히 기술한 것에 불과합니다.
break는 연산을 즉시 멈추고 자신이 속한 스코프를 벗어나도록 흐름을 제어하는 제어문입니다.


조건문을 이용해서 반복문을 만들 수 있습니다.
보통 아래와 같은 형태로 만듭니다.

초기값; 
while(조건절){ 
실행 코드; 
증감식; 
} 

EX>
int i = 0; 
while(i>0){ 
실행 코드; 
i++; 
} 



그런데 위와같은 형태가 자주 쓰이다 보니, for문이 등장하였습니다.

for(초기값; 조건절; 증감식){ 
실행 코드; 
} 

EX>
for(int i=0; i<10; i++){ 
실행 코드; 
} 


i = 0일 때 조건절에 검사하고 실행한 뒤에, 실행코드를 실행합니다. 그리고 i++이 됩니다.
i = 1일 때 조건절에 검사하고 실행한 뒤에, 실행코드를 실행합니다. 그리고 i++이 됩니다.
위와 같은 반복을 계속 하게 됩니다.

 

반복문을 제어하고 싶을 때는 break와 continue를 쓰면 됩니다.

break가 실행되면 이 반복문은 break를 만나는 순간 종료. 반복문 밖의 코드가 계속 실행.

break는 언제 어디서든 반복문을 바로 종료하는 역할을 한다.

continue는 현재 실행 중인 반복이 일단 종료된다. 그 다음 반복이 실행된다.

 

위와 같은 for문이 배열과 결합하는 경우가 자주 생깁니다.

int arr[5]; 
for(int i=0; i<arr.length; i++){ 
arr[i]; 
실행 코드; 
}

위와 같이 배열과 반복문을 쓰면 배열 요소 하나하나를 검색하고 제어할 수 있습니다.

 

배열에서 원하는 값을 찾기 위해 하나하나씩 검색하는 것입니다. 

위와 같은 구문이 자주 쓰이다 보니 for-each가 생겼습니다.

for(초기값 : 배열){ 
실행코드; 
} 

for each는 배열은 arr[0], arr[1], arr[2]와 같이 순차적이기 때문에 자동으로 증가합니다.
또한 arr[i]의 값이 i라는 변수에 하나씩 들어가면서 증가하게 됩니다.

#include  
#include  
using namespace std; 
int main(void) { 

int array[5] = { 10,20,30,40,50 }; 

for (int i : array) { 
printf("%d\n", i); 
} 

return 0; 
} 



그런데 배열은 처음 선언할 때 그 개수가 정해진 단점이 있습니다.
String[] members = new String[3]; 을 선언했을 때,
members[3] = "신입"; 이라고 하면 에러가 발생합니다.
그래서 이것을 위해서 컬렉션의 요소가 등장했습니다.  컬렉션은 후에 다루겠습니다.



프로그래밍의 3대 구성 요소는 조건문, 반복문, 순차문으로 이루어져있다고 할 수 있습니다.

위에서는 연산자를 통해 조건문, 반복문을 배웠습니다.

 

메소드는 method, 함수(function)이라고 부릅니다.

int main(void) { 
} 


에서 main부분이 메소드입니다.
메소드는 define으로 정의, 만들고, call로 호출, 사용합니다.
하나의 기능을 묶어 놓은 것이 메소드입니다. 메소드로 인해 코드의 재활용이 되면서 코드의 양이 줄게 됩니다.

void numbering(int limit){ 
int i = 0; 
while (i < limit) { 
printf("%d", i); 
i++; 
} 
} 
int main(void){ 
numbering(5); 
return 0; 
} 


메소드에 어떤 값을 입력하면 입력에 따라 결과가 출력이 됩니다.

프로그래밍은 바뀌지 않는 부분에는 신경쓰지 않고 바뀔수 있는 부분에 집중해야합니다.
메소드는 입력값에 따라 출력값이 달라집니다.
입력값을 수용하기 위한 변수가 정의된 부분을 파라미터(parameter), 매개변수라고 합니다.
실제로 위에서 5와 같이 전달된 값을 인자 또는 아규먼트(argument)라고 부릅니다.

메소드의 출력값은 return의 키워드와 연결되어있습니다.
메소드는 입력값은 무엇이고, 출력값은 무엇인가를 보면 해당 메소드가 어떤 용도이고 어떻게 동작하는지 이해할 수 있습니다.

int numbering(int limit){ 
int x; 
for(int i=0; i<limit; i++){ 
x++ 
} 
return x; 
} 


여기서 맨 앞에 int는 return과 연결되며, 반환할 값이 반드시 int라는 것을 명시합니다.
메소드의 반환 값을 return을 사용해서 외부로 꺼내는 것은 메소드의 가치를 높이기 위함입니다.

- 배열과 메소드
배열은 메소드에 응용될수 있습니다.
String[] members = getMembers();
getMembers();라는 메소드의 return값이 String[]으로 반환값을 통해 배열에 쓰입니다.
또한, 구조체에도 메소드가 쓰일 수 있습니다.
Student members = getStudents();
라고 쓰이면, getStudetns()의 return값이 Student로 Student의 구성 요소를 초기화 시켜줄 수 있습니다.

 

- 메소드 실행중에 입력값을 받으려면?
실행중에 입력값을 받으려면
int n;
scanf("%d", &n);
cin >> n; 등을 통해 입력받을 수 있습니다.

 

자바에서는 C나 C++와 다르게 Scanner라이브러리가 쓰입니다.

자바는 Scanner을 애플리케이션에 Load해야합니다. 
main메소드가 자바에 의해 호출되고, new Scanner라는 객체를 sc변수에 담으면 Scanner객체를 sc라는 변수를 통해 제어할 수 있습니다.

package 패키지 경로; 
import java.util.Scanner; 

public class Scanner{ 

public static void main(String[] args){ 
Scanner sc = new Scanner(System.in); 
int i = sc.nextInt(); 
System.out.println(i*100); 
sc.close(); 
}

} 

위의 코드를 Scanner객체의 반환값 중심으로 살펴보면 아래와 같습니다. 생성자에 매개변수로 들어간 값을 통해 sc에 값을 전달하고, sc안의 값이 있는지 hasNextInt()로 검색해서 True, False를 반환하게 됩니다.