함수 오버로딩(Function Overloading)


C언어에서는 다음과 같이 동일한 이름의 함수가 정의되는 것을 허용하지 않는다.

두 함수의 이름이 같기 때문에 컴파일 오류가 발생한다.


  1. int func(int num){  
  2.     num++;  
  3.     return num;  
  4. }  
  5.   
  6. int func(int a, int b){  
  7.     return a + b;  
  8. }  




C++에서는 함수호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하다.

즉 매개변수의 형태가 다르다면 동일한 이름의 함수를 정의할 수 있다 이를 함수 오버로딩 이라 한다.


그렇다면? C언어가 함수 오버로딩을 허용하지 않는 이유는 무엇일까?


호출하는 함수를 찾는 방법이 서로 다르기 때문이다.


C++ 

함수 이름 

함수의 이름, 매개변수의 선언 


C++는 함수의 이름과 매개변수 두가지 정보를 활용하지만 

C언어는 함수의 이름만을 이용하여 호출 대상을 찾는다.


따라서 C언어에서는 함수의 오버로딩이 불가능하다.



예제


  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. void func(void) {  
  5.     cout << "func(void) called" << endl;  
  6. }  
  7.   
  8. void func(char c) {  
  9.     cout << "func(char c) called" << endl;  
  10. }  
  11.   
  12. void func(int a, int b) {  
  13.     cout << "func(int a, int b) called" << endl;  
  14. }  
  15.   
  16. int main() {  
  17.     func();  
  18.     func('A');  
  19.     func(12, 13);  
  20.       
  21.     return 0;  
  22. }  



예제 결과




문제 : 다음 main( )함수에서 필요로 하는 swap 함수를 오버로딩 해서 구현해보자


  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. int main(void) {  
  5.     int num1 = 20, num2 = 30;  
  6.     swap(&num1, &num2);  
  7.     cout << num1 << ' ' << num2 << endl;  
  8.   
  9.     char ch1 = 'A', ch2 = 'Z';  
  10.     swap(&ch1, &ch2);  
  11.     cout << ch1 << ' ' << ch2 << endl;  
  12.   
  13.     double dbl1 = 1.1111, dbl2 = 5.5555;  
  14.     swap(&dbl1, &dbl2);  
  15.     cout << dbl1 << ' ' << dbl2 << endl;  
  16.   
  17.     return 0;  
  18. }  




  1. void swap(int *a, int *b){  
  2.     int tmp = *a;  
  3.     *a = *b;  
  4.     *b = tmp;  
  5. }  
  6.   
  7. void swap(char *a, char*b) {  
  8.     char tmp = *a;  
  9.     *a = *b;  
  10.     *b = tmp;  
  11. }  
  12.   
  13. void swap(double *a, double *b) {  
  14.     double tmp = *a;  
  15.     *a = *b;  
  16.     *b = tmp;  
  17. }  




매개변수의 디폴트 값 (Default Value)


C++에서는 매개변수를 다음의 형태로 선언하는 것이 가능하다.


  1. int func1(int num = 7) {  
  2.     return num + 1;  
  3. }  
  4.   
  5. int func2(int num1 = 5, int num2 = 7) {  
  6.     return num1 + num2;  
  7. }  


  • 함수호출 시 인자를 전달하지 않으면  7이 전달된 것으로 간주한다.
  • 함수호출 시 인자를 전달하지 않으면 5와 7이 전달된 것으로 간주한다.

예제1

  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. int addr(int num1 = 1, int num2 = 2) {  
  5.     return num1 + num2;  
  6. }  
  7.   
  8. int main() {  
  9.     cout << addr() << endl;  
  10.     cout << addr(5) << endl;  
  11.     cout << addr(3, 5) << endl;  
  12.   
  13.     return 0;  
  14. }  



예제 결과




주의할 점


 유효

유효하지 않음 

 int func(int num1=2) {. . .}

 int func(int num1=2, num2) {. . .}

 int func(int num1=1, int num2=3) {. . .} 

 int func(int num1=3, num2=5, num3) {. . .}

 int func(int num1, int num2=3) {. . .}

 int func(int num1, num2=3, num3) {. . .}

 int func(int a, int b, intc=4) {. . .}

 int func(int num1=2, num2, num3) {. . .}


함수에 전달되는 인자가 왼쪽에서부터 오른쪽으로 채워지기 때문에 

오른쪽 매개변수의 디폴트 값부터 채우는 형태로 정의해야 한다.


예제2


  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. int bvm(int len, int wd = 1, int hei = 1) {  
  5.     return len * wd * hei;  
  6. }  
  7.   
  8. int main() {  
  9.     cout << "[3,3,3] : " << bvm(3, 3, 3) << endl;  
  10.     cout << "[5,5,D] : " << bvm(5, 5) << endl;  
  11.     cout << "[7,D,D] : " << bvm(7) << endl;  
  12.     cout << "[D,D,D] : " << bvm() << endl;  
  13.   
  14.     return 0;  
  15. }  


  • 첫 번째 매개변수에는 디폴트 값이 지정되어 있지 않다.
  • bvm함수를 호출할 때에는 반드시 하나 이상의 인자를 전달해야 한다.
  • 12행에서 인자를 전달하지 않았기 때문에 컴파일 에러가 발생한다.

문제

문제 1 : 위의 함수를 매개 변수 디폴트 값 지정 형태가 아닌 함수 오버로딩의 형태로 재 구현 하라.

문제 2 다음과 같은 형태로의 함수 오버로딩은 문제가 있다. 어떠한 문제가 있는지 설명해보자.

  1. int test(int a = 10){  
  2.     return a + 1;  
  3. }  
  4.   
  5. int test(void){  
  6.     return 10;  
  7. }  



문제 1

  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. int bvm(int len = 1) {  
  5.     return len;  
  6. }  
  7. int bvm(int len, int wid) {  
  8.     return len*wid;  
  9. }  
  10. int bvm(int len, int wid, int hei) {  
  11.     return len*wid*hei;  
  12. }  
  13.   
  14. int main() {  
  15.     cout << "[3,3,3] : " << bvm(3, 3, 3) << endl;  
  16.     cout << "[5,5,D] : " << bvm(5, 5) << endl;  
  17.     cout << "[7,D,D] : " << bvm(7) << endl;  
  18.     cout << "[D,D,D] : " << bvm() << endl;  
  19.   
  20.     return 0;  
  21. }  



문제 2


함수 오버로딩의 조건을 만족해서 컴파일은 된다, 하지만 다음과 같이 인자를 전달하지 않으면서 함수를 호출하는 경우, 두함수를 모두 호출 조건을 만족하기 때문에 컴파일 에러가 발생한다.

'Language > C++' 카테고리의 다른 글

6. C++ 기본(6)  (0) 2016.12.13
5. C++ 기본(5) - OOP 단계별 프로젝트 01  (0) 2016.12.12
4. C++ 기본(4)  (0) 2016.12.11
3. C++ 기본(3)  (0) 2016.12.09
1. C++ 기본  (0) 2016.12.08

출력


  1. #include <iostream>  
  2.   
  3. int main() {  
  4.     int num = 20;  
  5.     std::cout << "Hello world" << std::endl;  
  6.     std::cout << "Hello" << "World" << std::endl;  
  7.     std::cout << num << ' ' << 'A';  
  8.     std::cout << ' ' << 3.14 << std::endl;  
  9.   
  10.     return 0;  
  11. }  



  • std :: cout << '출력대상'
출력 대상의 위치에는 무엇이든 올 수 있다. (정수, 실수, 문자열, 변수 etc...)

C언어의 printf 함수와 달리 서식문자를 이용해서 별도의 출력포맷을 지정하지 않아도 적절한 출력이 이뤄진다,


  • <<연산자를 이용한 출력대상의 연이은 표현과 개행
std :: cout << '출력대상1' << '출력대상2' << '출력대상3'; 과 같이 쓸 수 있다.
<<연산자를 이용한 std :: endl;의 출력은 개행으로 이어진다.


입력

  1. #include <iostream>  
  2.   
  3. int main() {  
  4.     int num1;  
  5.     std::cout << "input num : ";  
  6.     std::cin >> num1;  
  7.   
  8.     int num2;  
  9.     std::cout << "input num2 :";  
  10.     std::cin >> num2;  
  11.   
  12.     int result = num1 + num2;  
  13.     std::cout << "result : " << result << std::endl;  
  14.   
  15.     return 0;  
  16. }  


  • 데이터 입력에 사용되는 std :: cin 과 >> 연산자
키보드로부터의 데이터 입력을 위해서는 std :: cin >> '변수' ; 와 같은 형태를 취한다.
C++에서는 데이터의 입력도 출력과 마찬가지로 별도의 포맷 지정이 필요 없다.

  • 문자열과 같은 경우 또한 마찬가지로 별도의 포맷 지정이 필요 없다.
char str[100];
std :: cin >> str;


지역 변수 선언

  1. #include <iostream>  
  2.   
  3. int main() {  
  4.     int num1, num2;  
  5.     int result = 0;  
  6.   
  7.     std::cout << "input two numers";  
  8.     std::cin >> num1 >> num2;  
  9.   
  10.     if (num1 < num2) {  
  11.         for (int i = num1 + 1; i < num2; i++)  
  12.             result += i;  
  13.     }  
  14.     else {  
  15.         for (int i = num2 + 1; i < num1; i++)  
  16.             result += i;  
  17.     }  
  18.   
  19.     std::cout << result << std::endl;  
  20.   
  21.     return 0;  
  22. }  

  • 연속적인 데이터의 입력을 요구할 수 있다.
std :: cin>>'변수1' >> '변수2' ;
변수의 경계는 탭, 스페이스바, enter키의 입력과 같은 공백에 의해 나눠진다.

  • for문의 초기화 문장 내에서 변수 선언이 가능하다.
for (int num=0 ; num<10 ; num++){. . .}


배열 기반의 문자열 입출력

  1. #include <iostream>  
  2.   
  3. int main() {  
  4.     char name[100];  
  5.     char lang[100];  
  6.   
  7.     std::cout << "input your name : ";  
  8.     std::cin >> name;  
  9.   
  10.     std::cout << "what's your favorite language? : ";  
  11.     std::cin >> lang;  
  12.   
  13.     std::cout << "your name is : " << name << "^^\n";  
  14.     std::cout << "your favorite language is : " << lang << std::endl;  
  15.       
  16.     return 0;  
  17. }  


  • "\n"과 같은 특수문자는 C언어에서와 같은 의미를 지닌다. std :: endl로 개행의 역할을 대신할 뿐이다.
  • 9행, 12행 : 배열에 문자열의 저장을 명령하고 있다.

문제

문제 1. 사용자로부터 총 5개의 정수를 입력받아서 그 합을 출력하는 프로그램을 작성하라

문제 2. 프로그램 사용자로부터 이름과 전화번호를 문자열의 형태로 입력받아 출력하는 프로그램을 작성하라.

문제 3. 숫자 하나를 입력 받아서 그 숫자에 해당하는 구구단을 출력하는 프로그램을 작성하라.

문제 4. 
판매원들의 급여 계산 프로그램을 작성해보자. 모든 판매원에게 매달 50만원의 기본급여와 물품 판매 가격의 12%에 해당하는 돈을 지급한다. 예를들어 민수라는 친구의 이번달 물품 판매 금액이 100만원이라면 50 + 100*0.12=62 따라서 62만원을 급여로 지급받는다. 단 -1이 입력될 경우 프로그램을 종료한다.




문제1.

  1. #include <iostream>  
  2.   
  3. int main()  
  4. {  
  5.     int num[5];  
  6.     int hab=0;  
  7.   
  8.     for (int i = 0; i < 5; i++) {  
  9.         std::cout << "input num " << i+1 << std::endl;  
  10.         std::cin >> num[i];  
  11.         hab += num[i];  
  12.     }  
  13.     std::cout << "hab : " << hab << std::endl;  
  14.   
  15.     return 0;  
  16. }  

문제2.

  1. #include <iostream>  
  2.   
  3. int main() {  
  4.     char name[100];  
  5.     char phone[100];  
  6.   
  7.     std::cout << "input your name : ";  
  8.     std::cin >> name;  
  9.     std::cout << "input your phone numbr : ";  
  10.     std::cin >> phone;  
  11.   
  12.     std::cout << "your name is : " << name << std::endl;  
  13.     std::cout << "your phone number is : " << phone << std::endl;  
  14.   
  15.     return 0;  
  16. }  

문제3. 

  1. #include <iostream>  
  2.   
  3. int main() {  
  4.     int num;  
  5.     std::cin >> num;  
  6.   
  7.     for (int i = 1; i <= 9; i++)   
  8.         std::cout << num << "*" << i << "=" << num*i << std::endl;  
  9.       
  10.       
  11.     return 0;  
  12. }  

문제4.

  1. #include <iostream>  
  2.   
  3. int main() {  
  4.     int ins=0;  
  5.     int sal;  
  6.     int perf;  
  7.   
  8.     while (1) {  
  9.           
  10.         std::cout << "input salary performance : ";  
  11.         std::cin >> perf;  
  12.   
  13.         if (perf == -1)  
  14.             break;  
  15.   
  16.         ins = perf*0.12;  
  17.         sal = 50 + ins;  
  18.   
  19.         std::cout << "your salary : " << sal * 10000 << std::endl;  
  20.     }  
  21.     return 0;  
  22. }  


'Language > C++' 카테고리의 다른 글

6. C++ 기본(6)  (0) 2016.12.13
5. C++ 기본(5) - OOP 단계별 프로젝트 01  (0) 2016.12.12
4. C++ 기본(4)  (0) 2016.12.11
3. C++ 기본(3)  (0) 2016.12.09
2. C++ 기본(2)  (0) 2016.12.09

반복문


1) for 문


public class basic13{
public static void main(String[] args){
for (int i=0; i<10; i++){
System.out.print(i);
}
}
}

반복 후 작업문에는 콤마로 분리하여 여러 문장을 둘 수 있다.


public class basic13{
public static void main(String[] args){
for (int i=0; i<10; i++, System.out.print(i)){
}
}
}


※ 결과



for 문으로 무한 반복을 하고자 하면 다음과 같이 쓸 수 있다.


public class basic13{

public static void main(String[] args){

for (int i = 0; ; i++, System.out.println(i)){

}

}

}







2) while 문

public class basic14{
public static void main(String args[]){
int i=0;
while(true){
system.out.print(i);
i++;
}
}
}



Continue & break



1) continue

continue 문은 for문에서는 반복 후 작업으로 분기하고, while문에서는 조건식으로 다음과 같이 분기한다.



import java.util.Scanner;
public class basic15 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("input 5 number");
int sum = 0;
for (int i = 0; i < 5; i++) {
int n = scanner.nextInt();
if (n <= 0)
continue;
else
sum += n;
}
System.out.println("Pnum hab : " + sum);
}
}












2) break

break 문은 하나의 반복문을 즉시 벗어날 때 사용하며 아래와 같이 그 자체가 하나의 문장이다.


import java.util.Scanner;
public class basic16 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("input exit -> return 0;");
while (true) {
System.out.println(">>");
String text = scanner.nextLine();
if (text.equals("exit"))
break;
}
System.out.println("exit program");
scanner.close();
}
}


결과





'Language > Java' 카테고리의 다른 글

Java BASIC 04 - Syntax basic 3  (0) 2016.11.23
Java BASIC 03 - Syntax basic 2  (0) 2016.11.23
Java BASIC 02 - Syntax basic1  (0) 2016.11.23
Java BASIC 01 - What is Java??  (0) 2016.11.23

연산자




시프트는 >>, << 각각 나누기 2, 곱하기 2와 같다.

최상위 비트의 빈자리를 시프트 전의 최상위 비트로 다시 채우는 산술 시프트(>>)

최상위 비트를 무조건 0으로 채우는 논리 시프트(>>>) 가 있다.


조건 연산자는 3개의 피 연산자로 구성되어 삼항 연산자라고 한다.


형식 : '조건? call1 : call2'


위의 식에서 조건이 참이면 call1이 실행되고 거짓이면 call2가 실행된다.



조건문



1) 단순 if문


import java.util.Scanner;
public class basic8{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int score = 85;
if (n % 2 == 0) {
System.out.print(n);
System.out.println("는 짝수입니다.");
}
if (score >= 80 && score <= 89)
System.out.println("학점은 B입니다.");
scanner.close();
}
}


결과















2) if-else문


import java.util.Scanner;
public class basic9 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
if(n%2==0){
System.out.print(n);
System.out.println("는 짝수입니다.");
}
else{
System.out.print(n);
System.out.println("는 홀수입니다.");
}
scanner.close();
}
}


결과




3) 다중 if-else문


import java.util.Scanner;
public class basic10 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
char grade;
if (score >= 90)
grade = 'a';
else if (score >= 80)
grade = 'b';
else if (score >= 70)
grade = 'c';
else
grade = 'd';
System.out.println("점수"+score+" : 학점 : "+grade);
}
}


결과














4) 중첩 if-else문


import java.util.Scanner;
public class basic11{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
if (n>=90){
System.out.println("90점 이상입니다.");
if(n>=95)
System.out.println("grade : A+");
else
System.out.println("grade : A");
}
else if(n>=80){
System.out.println("80점 이상입니다.");
if(n>=85)
System.out.println("grade : B+");
else
System.out.println("grade : B");
}
else{
System.out.println("80점 이하입니다");
System.out.println("grade : C");
}
scanner.close();
}
}


결과



5) switch문

public class basic12{
public static void main(String[] args){
char grade = 'B';
switch(grade){
case 'A':
System.out.println("Congratulation!!");
System.out.println("Congratulation!!");
break;
case 'B':
System.out.println("Good!!!");
break;
case 'C':
System.out.println("try hard!!");
break;
default:
System.out.println("FFFFFFF");
break;
}
}
}

※ 결과














'Language > Java' 카테고리의 다른 글

Java BASIC 05 - syntax basic 4  (0) 2016.11.25
Java BASIC 03 - Syntax basic 2  (0) 2016.11.23
Java BASIC 02 - Syntax basic1  (0) 2016.11.23
Java BASIC 01 - What is Java??  (0) 2016.11.23

리터럴


정수 리터럴은 10진수, 8진수, 16진수, 2진수로 표현 가능하며, 자바에서는 int 타입으로 컴파일 된다.

Long타입으로 지정할 시 L이나 l을 붙여주면 가능하다.


※ 정수 리터럴




실수 리터럴은 소수점 형태나 지수 형태로 실수를 표현한 값이다. 실수 리터럴은 double타입으로 자동 처리된다.


double d = 1234E-4;

출력 : 0.1234


double d = .1234D;


출력 : 0.1234f


문자 리터럴은 ''로 문자를 표현하거나 \u 다음에 문자의 유니코드 값을 사용하여 표현한다.


char a = 'w';
char
 b = '
';
char
 c = \uae00;


특수문자 리터럴은 Escape Sequence라고도 한다.




논리 타입 리터럴은 true, false 두개이고, Boolean 타입의 변수에 직접 치환하거나 조건문에 사용한다.



상수


리터럴을 상수로 선언하면 변수처럼 표현이 가능하다.

상수는 final 키워드를 사용하여 선언한다. 상수 선언시에는 static 키워드를 이용하는 것이 바람직하다.


public class String1 {
public static void main(java.lang.String[] args) {
final double PI =3.14;
double r = 10;
double circ=r*r*PI;
System.out.println("반지름"+r+",");
System.out.println("원의 면적 = " + circ);
}


※ 결과














※ '반지름'과 같은 한글은 ANSI 표준에서 지원되지 않는 문자로 인코딩 옵션을 주어 컴파일한다.


타입 변환

자동 타입 변환 : 타입이 일치하지 않을때, 컴파일러는 작은 타입 -> 큰 타입으로 자동 변환.

강제 타입 변환 : 캐스팅(casting)이라고도 하며 큰 타입을 작은 타입에 강제적으로 변환 시킬 때 사용.

public class basic6 {
public static void main(java.lang.String[] args) {
int a = 25;
double b = 3.14*10;
double c = 1.9;
int n = (int)c;
System.out.println(n);
}
}










※ 결과




double을 int 로 캐스팅 할 경우 소숫점 자리의 수는 버림하고 정수만 표시한다.



표준 입력


System.in는 자바에서 제공하는 것으로 표준 입력 스트림 객체이다.

System.in을 직접 사용하는 응용프로그램은, 받은 바이트 정보를 문자로 스스로 변환해야 하는 번거로움이 있어

Scanner클래스를 이용한다.



※ 스트림 클래스의 주요 메소드



예제


import java.util.Scanner;

public class input {
    public static void main(String[] args) {    
        Scanner scanner = new Scanner(System.in);

        String name = scanner.next();
        System
.out.println("당신의 이름은 "+name+"입니다." );
    
        scanner.close();
    }
}


※결과




'Language > Java' 카테고리의 다른 글

Java BASIC 05 - syntax basic 4  (0) 2016.11.25
Java BASIC 04 - Syntax basic 3  (0) 2016.11.23
Java BASIC 02 - Syntax basic1  (0) 2016.11.23
Java BASIC 01 - What is Java??  (0) 2016.11.23

Java 프로그램 기본 구조


public class basic2{
public static int sum(int n, int m){
return n+m;
}
public static void main(String[] args){
int i=20;
int s;
char a;
s = sum(i,10);
a = '?';
System.out.println(a);
System.out.println("hello");
System.out.println(s);
}
}

※결과












클래스 선언


자바에서는 클래스 밖에 변수, 상수, 메소드, 전역변수 등을 생성할 수 없다.


식별자






  1. 특수문자, 공백은 식별자로 사용할 수 없으나 _, $는 예외다.
  2. 식별자로 한글을 사용할 수 있다.
  3. If, while, class 등 자바 언어의 키워드는 식별자로 사용할 수 없다.
  4. 식별자의 첫 번째 문자로는 숫자는 사용할 수 없다.
  5. Ture, false, null은 식별자로 사용할 수 없다.
  6. 대소문자를 구별한다.
  7. 길이 제한이 없다.


데이터 타입




※ C/C++에서의 char는 1byte이지만 Java는 unicode를 나타내기 위해서 2byte를 사용한다.



문자열

public class basic3{
public static void main(java.lang.String[] args){
String toolname="jdk";
System.out.println( toolname + "1.92");
}
}

자바에서의 문자열은 기본 데이터 타입이 아닌 String 클래스를 이용한다.
또한 +연산자를 이용하여 문자열끼리 연결이 가능하다.


※ 결과











변수, 연산자, 수식


1) 변수선언

public class basic4{
public static void main(java.lang.String[] args) {
int radius;
double weight=75.57;
char c1,c2,c3='a';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
}
}

컴파일 에러가 발생함

변수를 나열하여 선언할 때는 = 연산자로 초기화를 하지 않으면 초기화되지 않고 선언만 된다.

올바른 예

public class basic4{
public static void main(java.lang.String[] args) {
int radius=5;
double weight=75.57;
char c1='a';
char c2='b';
char c3='c';
System.out.println(radius);
System.out.println(weight);
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
}
}

※ 올바른 결과






















'Language > Java' 카테고리의 다른 글

Java BASIC 05 - syntax basic 4  (0) 2016.11.25
Java BASIC 04 - Syntax basic 3  (0) 2016.11.23
Java BASIC 03 - Syntax basic 2  (0) 2016.11.23
Java BASIC 01 - What is Java??  (0) 2016.11.23

Java 특징


1. 객체 지향 언어

2. 소스파일은 .java , 컴파일된 확장자는 .class

3. Javascript와는 다른언어이다.



개발 도구

1. JDK : 자바 개발환경 도구, 자바 컴파일러와 JRE, 클래스 라이브러리 샘플 소스등이 포함

2. JRE : 자바 응용프로그램 실행환경, 일반사용자는 JRE만 받아도 자바 프로그램 실행 가능



Java 프로그래밍 기초


1. 클래스 이름과 자바 소스 파일 이름이 일치해야 한다.

2. 파일명의 대소문자를 구분한다.

3. 자바 프로그램의 실행은 콘솔 환경에서 확장자 이름을 뺀 이름으로 java 명령을 이용하여 실행가능



Java 언어 특징


  1. 플랫폼 독립성 – 자바는 독립적인 바이트 코드로 컴파일 된다. JVM만 있으면 실행 가능.
  2. 객체 지향 – 객체 지향 언어로서 캡슐화, 상속, 다형성 등을 지원한다.
  3. 클래스로 캡슐화 – 캡슐화 원칙을 지켜, 변수나 메소드는 반드시 클래스 내에 구현하도록 한다. 또한 내부 클래스(Inner Class)를 만들 수 있다.
  4. 소스와 클래스 파일 – 소스가 컴파일 된 클래스 파일에는 반드시 하나의 자바 클래스만이 들어 있다. 그러므로 하나의 자바 소스 파일에 여러 개의 클래스를 작성한 후 컴파일 하면 별도의 클래스 파일이 생성된다. (ex, 4개면 4개의 Class file)
  5. 실행 모듈 – 자바 응용프로그램은 한 개의 클래스 또는 다수의 클래스로 구성되고, jar 파일 형태로 압축 가능하다. 하나의 클래스 파일에 main() 메소드가 두 개 이상이 있을 수 없다. 각 클래스는 main()을 가지는 것이 가능하다.
  6. 패키지 – 서로 관련 있는 클래스는 패키지로 묶어 관리한다.
  7. 멀티스레드 – 하나의 자바 프로그램에서 다수의 스레드가 동시에 실행 할 수 있는 환경 지원. 운영체제의 지원 없이 자바는 멀티스레드 프로그래밍이 가능하다.
  8. 가비지 컬렉션 – 자바는 메모리를 할당 받는 기능은 있지만, 메모리를 반환하는 기능은 없다. 프로그램 내의 사용되지 않는 메모리는 JVM의 가비지 컬렉션 기능에 의해 자동으로 회수된다.
  9. 실시간 응용 시스템에 부적합 – 자바 응용프로그램은 실행 도중 예측할 수 없는 시점에 가비지 컬렉션이 실행되므로 프로그램 실행이 일시적으로 중단된다. 이런 문제로 인해 일정 시간(deadline) 내에 반드시 실행 결과를 내야만 하는 실시간 시스템에는 자바 언어가 적합하지 않다.
  10. 자바 프로그램은 안전하다 – 자바 언어는 타입 체크가 매우 엄격하며, C/C++와 달리 메모리의 물리적 주소를 사용하는 포인터의 개념이 없기 때문에, 잘못된 자바 프로그램으로 인해 컴퓨터 시스템이 중단 되는 일은 없다.
  11. 프로그램 작성이 쉽다 – 자바는 포인터 개념이 없어 작성이 편하다.
  12. 실행 속도 개선을 위해 JIT 컴파일러가 사용된다. - JVM 의 인터프리터 방식 개선을 위해 JIT 컴파일러로 프로그램 실행 도중 해당 CPU에 기계어 코드를 컴파일하고 CPU가 바로 기계어를 실행하도록 한다.


Java의 시작함수는 main

public class secretpack {
public static void main(String[] args) {
System.out.println("welcome to secretpack world");
}
}



본격적인 코딩은 다음 차시에~


'Language > Java' 카테고리의 다른 글

Java BASIC 05 - syntax basic 4  (0) 2016.11.25
Java BASIC 04 - Syntax basic 3  (0) 2016.11.23
Java BASIC 03 - Syntax basic 2  (0) 2016.11.23
Java BASIC 02 - Syntax basic1  (0) 2016.11.23

함수 활용하기


python에서 함수는 다음과 같이 정의한다.


def 함수명 (인자,인자....):

코드들

return(리턴값)


함수 정의 규칙

1.  def 함수이름(인자,인자....):  으로 함수이름과 인자를 정의한다.

2. 함수의 리턴값은 return(리턴값)으로 한다.

3. 리턴값이 없을 경우 return으로 마무리하거나 생략해도 무관하다.


for 문

어떤 로직을 반복적으로 실행할 때 가장 많이 사용되는 반복문 이다.

for 문의 기본적인 구문은 다음과 같다.


for 변수 in 범위:

반복적으로 실행할 코드


for문의 범위로 사용되는 것은 시퀀스 자료형 또는 반복 가능한 자료여야 한다.


사용 가능한 객체

1.  문자열

2. 리스트, 튜플

3. 사전

4. range( )함수

5. 그외 반복 가능한 자료


문자열을 범위로 지정한 예



※파이썬은 기본적으로 개행이 되서 출력된다 

개행을 원하지 않는다면 뒤에 end='' 마지막 인자에 넣어서 출력하도록 하자.


리스트를 범위로 지정한 예



사전을 범위로 지정한 예




if 문

if 문은 조건이 참인지 아닌지를 판단하여 코드를 수행할때 사용하는 제어문이다.

if 문의 기본적인 사용은 다음과 같다.


if 조건 1:

실행코드1

elif 조건2:

실행코드2

else:

실행코드3

실행코드4


string.replace( )

문자열 객체의 replace( )는 문자열에 있는 특정 문자 또는 문자열을 다른 문자로 바꿔준다.





'Language > Python' 카테고리의 다른 글

4. Python 3 기초문법(4)  (0) 2016.07.19
3. Python 3 기초문법(3)  (0) 2016.07.19
2. Python 3 기초문법(2)  (0) 2016.07.19
1. python 3 기초문법  (0) 2016.07.19
튜플자료

리스트와 비슷하지만 값을 변경할 수 없는 자료형이다. 튜플자료는 () 로 나타내며, 사용법은 리스트와 비슷하다. 차이점은 리스트의 멤버는 그 값을 변경할 수 있지만 튜플의 멤버는 그 값을 변경할 수 없다.



첫번째 멤버인 1을 2로 바꾸기 위해 tupledata[0] = 2 를 실행하면 에러가 나는 것을 확인할 수 있다. 튜플은 멤버값이 변경되지 않게 하고싶을때 사용되는 자료이다.



시퀸스 자료형


어떤 객체가 순서를 가지고 나열되어 있는 자료형을 시퀸스 자료형이라고 한다.


파이썬 기본 자료형 중 시퀸스 자료형은 문자열 이외에 리스트, 튜플이 있다.


-자료형의 종류


파이썬의 시퀸스 자료형은 다음과 같은 공통 특성을 갖고 있다.


 특성

설명

인덱싱 

인덱스를 통해 해당 값에 접근할 수 있다. 

(인덱스는 0부터 시작) 

슬라이싱 

특정 구간의 값을 취할 수 있다. 

(시작 인덱스와 끝 인덱스로 정의한다.) 

 연결

'+' 연산자를 이용해 두 시퀸스 자료를 연결하여 

새로운 시퀸스 자료로 생성 

반복 

'*' 연산자를 이용해 시퀸스 자료를 여러번 반복하여 

새로운 시퀸스 자료로 생성 

멤버 확인 

어떤 값이 시퀀스 자료에 속해 있는지 확인 ('in' 키워드) 

길이 정보 

자료의 멤버 개수또는 문자열 길이를 알수 있다. (len( ) 함수 이용)


인덱싱



시퀀스 자료형에서 인덱스를 통해 해당하는 값을 얻는 방법이다.


자료형은 0부터 시작하며 음수의 경우 끝에서부터 몇번째 라고 말하는 것과 같다.


따라서 str[-1] = 'n' 이고 str[-3] = 'h'가 되는 것이다.



슬라이싱


슬라이싱은 시퀀스 자료형에서 인덱스로 범위를 표현하여 범위에 해당하는 시퀀스 자료의 일부를 구현하는 방법이다.


[시작 인덱스:끝인덱스:스텝] 의 방법으로 접근한다.


여기서 시작 인덱스는 슬라이싱 범위의 시작을, 끝인덱스는 슬라이싱 범위의 끝을, 스텝은 자료를 취하는 간격을 의미한다. 


스텝은 디폴트1이므로 이부분은 생략가능하다.


이를 부등식으로 나타내면 "시작 인덱스 이상이고 끝 인덱스 미만" 을 의미한다.



str = 'I love Python'의 양수 인덱스와 음수 인덱스


 str


 

 양

 0

10 

11 

12 

 음

-13 

-12 

-11 

-10 

-9 

-8 

-7 

-6 

-5 

-4 

-3 

-2 

-1 


위 표를 참고하여 예시에서 보인 슬라이싱 범위를 풀어보자.


str [0:3] -> 인덱스 0이상 3미만까지 슬라이싱 = 'I l'

str [:6]  ->  인덱스 0이상 6미만까지 슬라이싱 = 'I love'

str[:-3]  ->  처음부터 끝에서 3번째 미만까지 슬라이싱 = 'I love Pyt'

str[-5]  ->  끝에서 5번째 이상부터, 끝까지 슬라이싱 = 'ython'



※스텝이 있는 슬라이싱



str[: :2]  -> 처음부터 끝까지 스텝을 2로 슬라이싱 

즉 인덱스가 0,2,4,6 인 부분을 꺼내서 결과로 보여줌 ='Ilv yhn'


str[: :-1]  -> 처음부터 끝까지 스텝을 -1로 해서 슬라이싱

즉 문자열 모든 범위에서 스텝을 거꾸로 1씩 가면서 슬라이싱하므로 

문자열의 역순이 결과로 나온다 = 'nohtyP evol I'



'+' 를 이용한 연결


'+' 연산자를 이용해 두개의 시퀀스 자료를 결합한다.




'*' 를 이용한 연결


'*'연산자를 이용해 시퀀스 자료를 지정된 숫자만큼 반복한다.



'in' 키워드 를 이용한 멤버 확인


시퀀스 자료에 특정한 값이 멤버로 있는지 확이 가능하다.



'o'라는 문자와 'love'라는 문자열은 문자열자료 str 에 존재하므로 True 를 리턴한다.

'A'라는 문자는 문자열자료 str 에 존재하지 않으므로 False 를 리턴한다.


시퀀스 자료에 어떤 객체가 존재하는지 확인하고자 하는 경우 if 문과 in 키워드를 이용해 루틴을 구현하는 것이 일반적인 방법이다.




결과




※ 시퀀스 자료형은 아니지만 사전자료에서도 'in' 키워드를 쓸 수 있다.


len( ) 를 이용한 길이 정보


모든 시퀀스 자료는 크기를 가지고 있다. 문자열은 문자열을 구성하는 문자 개수가 크기이고 리스트는 리스트에 포함된 멤버 개수가 크기이다. 튜플 역시 리스트와 동일하게 포함된 맴버 개수가 크기이다.



※사전자료에 len( )함수가 사용되면 사전 자료의 멤버인 (키:값)쌍의 개수를 리턴함.






'Language > Python' 카테고리의 다른 글

5. Python 기초문법(5)  (0) 2016.07.19
3. Python 3 기초문법(3)  (0) 2016.07.19
2. Python 3 기초문법(2)  (0) 2016.07.19
1. python 3 기초문법  (0) 2016.07.19

사전 자료


파이썬의 사전자료는 키(key):값(value)으로 된 쌍이 멤버로구성된 순서가 없는 자료형이다. 사전자료는{ }로 표현하고 그 안에 키:값 쌍으로 된 멤버를 ','로 구분하여 나열합니다.



사전자료의 멤버를 접근할 때 리스트와 같이 순서를 나타내는 첨자가 아니라 키를 알아야 접근이 가능하다.


사전에 맴버 추가하기


사전에 멤버를 추가하려면 "사전 객체[키]=값"과 같이 입력하면 된다.



사전에 맴버 삭제하기

사전 멤버를 삭제하려면 del 키워드를 이용한다.



사전 객체 삭제하기


사전 객체를 삭제하려면 리스트 객체 삭제와 마찬가지로 del 키워드를 이용한다.



사전에서 키(key) 추출하기


사전에서 키만 얻으려면 사전 객체의 keys()를 이용한다. keys()는 사전에 있는 키만 따로 모아 리스트로 리턴한다.


사전에서 값(value) 추출하기


사전에서 값만 얻으려면 사전 객체의 values()를 이용합니다. value()는 사전에 있는 값들만 따로 모아서 리스트로 리턴한다.


사전 모든 키:값을 멤버로하는 리스트만들기


사전에 있는 모든 키:값을 멤버로 하는 리스트를 만들기 위해서 item()을 이용한다.




'Language > Python' 카테고리의 다른 글

5. Python 기초문법(5)  (0) 2016.07.19
4. Python 3 기초문법(4)  (0) 2016.07.19
2. Python 3 기초문법(2)  (0) 2016.07.19
1. python 3 기초문법  (0) 2016.07.19

+ Recent posts