11일차 강의 정리


DAY8, DAY9, DAY10 의 총 정리


객체지향 언어

기능 -> 메소드-동사

속성 -> 필드-명사


메소드

형태 : [static] 자료형 메소드명 (인자){ 

...

return 자료형에 해당하는 값;

   }


1. static 메소드(클래스메소드)

(main에서 사용 형태) [패키지경로].[class명.]메소드명();  *나자신이갖는 메소드의 경우 class명 생략

객체의 생성없이 바로 사용가능

프로그램 시작과 동시에 메모리 static영역에 로딩되어 실행

가비지 컬렉션의  메모리 관리대상이 아님

라이프 사이클은 프로그램 시작 ~ 종료시 까지 항시 유지

절차지향 프로그래밍 - 함수 ...와 동일하다고 생각하면 됨


2. non-static 메소드(인스턴스 메소드)

(main에서 사용 형태)

[패키지경로].Ex01(클래스명) me = new [패키지경로].Ex01()(생성자호출); //참조변수

참조변수(객체 메모리주소값).메소드명();

this = 참조변수 역할

객체 생성이 우선 - 생성된 객체의 주소값을 기억하기 위한 참조변수(클래스타입)


생성자

형태 : [접근제한자] 클래스명(){

...

}

객체 생성에 관여 - 객체 생성시 추가적인 작업

객체 생성 시에 단 한번 수행 - 재호출 불가

일반적으로 필드 값의 초기화


변수

멤버필드(전역변수)

형태 : [static] 자료형 변수명 = 초기화;

호출시 지역변수와 멤버필드 그명칭이 동일할 시, 우선순위는 지역변수>멤버필드


클래스변수(static) - 메모리 static 영역에 프로그램 시작과 동시에~~프로그램end

클래스명.변수명


인스턴스변수(non-static)

참조변수명.변수명


예제소스 & 변수의 상수화

소스

public class Ex01 {

int a;

static final double PI=3.14; //변수의 상수화(변경x)


public Ex01(){        //생성자

a=9;

}

public Ex01(int a){

this.a=a; //멤버필드

}

public static void main(String[] args) {

int a = func1();

func1();

Ex01 me = new Ex01(); //객체 생성

me.func2(); //참조변수를 반복해서 사용

me.func2();

me.func2();

new Ex01().func2(); //한번호출

  //PI=4.12; //에러

System.out.println("PI는 "+PI);

}//main end

static int func1(){

System.out.println("static 메소드");

return 0;

}

void func2(){

System.out.println(++a+"  non-static 메소드");

}

}//class end

결과





'* Programming > JAVA' 카테고리의 다른 글

DAY12 배열 문제  (0) 2016.07.19
DAY12 배열  (0) 2016.07.19
DAY10 업다운 게임  (0) 2016.07.18
DAY10 Class/생성자  (0) 2016.07.18
DAY9 멤버필드  (0) 2016.07.15

5일차 강의 정리


1. 메소드 ( return 값이 없는 경우 )

소스

public class Ex01 {

public static void func1(){

//메소드 start

//메소드: 메소드명(인자){}

System.out.println("메소드1 출력합니다.");

System.out.println("-------------------");

}//func1 end

public static void main(String[] args) {

//main start

String st1="안녕"; //String 변수 선언 및 초기화

func1(); //메소드1 호출

func2(1,2); //메소드2-1 호출

func2(st1,999); //메소드2-2 호출

func2(10,20,30); //메소드2-3 호출

}//main end, 메소드 end


public static void func2(int a,int b){ //메소드 이름 차별화

System.out.println("메소드2-1 출력합니다.");

System.out.println(a+"+"+b+"="+(a+b));

}

public static void func2(String a,int b){ //But 자료형이 다를경우 허용

System.out.println("메소드2-2 출력합니다.");

System.out.println(a+"+"+b+"="+(a+b));

}

public static void func2(int x,int y,int z){         //But 인자의 갯수가 다를경우 허용(->메소드 오버로드)

System.out.println("메소드2-3 출력합니다.");

System.out.println(x+"+"+y+"+"+z+"="+(x+y+z));

}

}//class end

메소드 호출 

main메소드 에서 다른 class 안의 메소드를 호출(func1,func2..)

메소드는 이름을 다르게 써야한다

이름을 같게 쓸경우 ( )안 인자의 자료형이 다르거나 인자의 갯수가 다른경우 허용한다

(단, 인자의 자료형이 아니라 메소드 이름앞의 자료형만 다르게 쓰면 오류처리된다)

이를 메소드 오버로드 라고 한다

결과

2. 메소드 ( return 값이 있는 경우 )

소스

public class Ex02 {

public static void main(String[] args) {

//main start

//메소드를 이용한 계산기 프로그램

int a=5,b=3;

func1(a,b); //덧셈 메소드 호출

func2(a,b); //뺄셈 메소드 호출

int x = func3(a,b); //곱셈 메소드 호출

System.out.println("func3의 수행결과는 "+x);

func4(a,b); //나눗셈 메소드 호출

return; //main이 void인 이유 : return 값이 없기 때문에

}//main end


public static void func1(int a,int b){ //덧셈 메소드

System.out.println(a+"+"+b+"="+(a+b));

return; //void인 경우 생략가능

}

public static void func2(int a,int b){ //뺄셈 메소드

System.out.println(a+"-"+b+"="+(a-b));

}

public static int func3(int a,int b){ //곱셈 메소드(return c의 자료형을 void대신 int로 변경)

int c = a*b;

return c; //c값을 main으로 리턴

}

public static void func4(double a,double b){ //나눗셈 메소드

System.out.println(a+"÷"+b+"="+(a/b));

}

}//class end

return 할 값의 자료형에따라 함수의 자료형을 동일 시 해야한다

현재 예제에서 곱셈 메소드(func3)에서 확인할 수있다

결과

3. args[]를 이용하여 입력 받아 계산하기

소스

public class Ex03 {

/* args 입력을 받아 계산기

* 메소드 사용

* 기능별 (+,-,*,/)

*/

public static void main(String[] args) throws Exception{

//main start

int a = Integer.parseInt(args[0]);       //입력받은 문자열 정수(int)로 변환하며 선언 (첫번째 수)

String b = args[1];                        //연산자는 문자열 그대로 선언(+, -, *, /)

int c = Integer.parseInt(args[2]);       //입력받은 문자열 정수(int)로 변환하며 선언 (두번째 수)

func1(a,b,c); //메소드 호출

}//main end

public static void func1(int a,String b,int c){    //계산할 메소드 func1

int add = a+c;

int sub = a-c;

int mul = a*c;

double div = (double)a/(double)c;

if(b.equals("+")){ //b가 +인 경우

System.out.println(a+"+"+c+"="+add);

}else if(b.equals("-")){

System.out.println(a+"-"+c+"="+sub);

}else if(b.equals("*")){

System.out.println(a+"X"+c+"="+mul);

}else if(b.equals("/")){

System.out.println(a+"÷"+c+"="+div);

}else {

System.out.println("잘못 입력하셨습니다.");

}

/*switch(b){        //switch 문 사용

case "+":

System.out.println(a+b+c+"="+add);

break;

case "-":

System.out.println(a+b+c+"="+sub);

break;

case "*":

System.out.println(a+"X"+c+"="+mul);

break;

case "/":

System.out.println(a+"÷"+c+"="+div);

break;

default:

System.out.println("잘못 입력하셨습니다.");

}*/

}//func1 end

}//class end

계산하는 함수는 if()문 switch()문 두가지 방법을 제시해봤다

10 / 3 입력

띄어쓰기로 구분하여 입력한다

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY6 random 함수  (0) 2016.07.12
DAY6 문제  (0) 2016.07.12
DAY4 문제  (0) 2016.07.11
DAY3 조건문 / 반복문  (0) 2016.07.07
DAY2 변수  (0) 2016.07.06

+ Recent posts