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

10일차 강의 정리


DAY8, DAY9, DAY10 은 클래스의 구성요소에 대해 다룬다

1. Car class

소스1

public class Ex01 {

public static void main(String[] args) {

Car myCar = new Car();        //myCar 클래스 선언

System.out.println(myCar.model);

System.out.println(myCar.color);

myCar.run();

myCar.stop();

myCar.run();

myCar.color="파랑"; //myCar 색상 변경

System.out.println(myCar.color+"색"+myCar.model+"인 내차를 타고");

myCar.run();

System.out.println();

Car yourCar = new Car();        //yourCar 클래스 선언

System.out.println(yourCar.color+"색"+yourCar.model+"인 옆사람 차");


}//main end

}//Ex02 class end


class Car{ //Car class

String model = "모닝";

String color = "빨강";

public void run(){ //달린다

System.out.println("달린다");

}

public void stop(){ //멈춘다

System.out.println("멈춘다");

}

}//Car class end

결과1

소스2

public class Ex02 {

public static void main(String[] args) {

motocycle my = new motocycle();

int speed = 0;

speed = my.speedUp(speed, 20);    //속도업

speed = my.speedUp(speed, 30);

speed = my.speedUp(speed, 10);

my.speedView(speed);

speed = my.speedDown(speed,20);    //속도다운

speed = my.speedDown(speed,10);

speed = my.speedDown(speed,10);

my.speedView(speed);

}//main end

}//class end


class motocycle{

public void speedView(int speed){

System.out.println("현재속도:"+speed+"km");

}

public int speedUp(int a,int b){ //스피드 업

if(a+b<=80){

return a+b;

}else{

return 80; //최대속도 제한

}

}

public int speedDown(int a,int b){ //스피드 다운

if(a-b>=0){

return a-b;

}else{

return 0; //정지시 속도는 0

}

}

}//class end

결과2

소스3

public class Ex03 {

static String model = "텍트";

int speed;

int minSpeed;

int maxSpeed=80;

public static void main(String[] args) {

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

me.speedUp(20);

me.speedUp(20);

prn(me);

me.speedUp(20);

prn(me);

me.speedUp(20);

prn(me);

me.speedUp(20);

prn(me);

me.speedUp(20);

prn(me);

me.speedUp(20);

me.speedUp(20);

prn(me);

me.speedDown(20);

prn(me);

}//main end

public static void prn(Ex03 me){ //(String st)과 같은 개념, String 또한 클래스 이다

System.out.println(model+"의 현재속도는 "+me.speed+"km");

}

public void speedUp(int speed1){

if(speed+speed1<=maxSpeed){

speed += speed1;

}else{

speed = maxSpeed;

}

}//speedUp end

public void speedDown(int speed1){

if(speed-speed1>=0){

speed -= speed1;

}else{

speed =0;

}

}//speedDown end

}//class end

결과3

2. 생성자 -객체 생성 관여

객체 생성시 단한번 수행

생성자 없이는 객체 생성이 불가

필드의 초기화가 주 이다

소스

public class Ex01 {

public static int num1; //static 을 사용하는 순간 ,값을 유지하며 공유하게된다

public int num2;        //초기화 하지않아도 defualt값 0으로 초기화


public Ex01(){ //생성자

System.out.println("객체 생성");

}

public static void main(String[] args) {

//생성자 호출 . 객체의 주소를 me에 저장 //객체를 생성하면서 생성자 안의 print문을 출력

Ex01 me = new Ex01();     

me.func1();

me.func2();

me.func1();

me.func3();

me.func1();

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

Ex01 me2 = new Ex01();     //다시 객체를 생성하지만 static 변수인 num1은 갑을 유지하기 때문에 1이다

me2.func1();

me2.func2();

me2.func1();

me2.func3();

me2.func1();

}//main end

public void func1(){        //결과출력

System.out.println("num1:"+num1+", num2:"+num2);

}

public void func2(){        //num1 +1

num1++;

}

public void func3(){        //num1의 수를 num2에 대입

num2=num1;

}

}//class end

결과

소스2

인자값을 받는 생성자

public class Ex02 {

String name = "모닝";

int speed;

int maxSpeed;

int minSpeed;

public Ex02(){ //기본 생성자

speed=0;

maxSpeed=80;

minSpeed=0;

}

public Ex02(String st){ //인자 값을 받는 생성자

name = st;

maxSpeed=80;

minSpeed=0;

}

public Ex02(String st, int a){

name =st;

maxSpeed=a;

minSpeed=0;

}

public static void main(String[] args) {

Ex02 me = new Ex02(); //내 객체 생성

me.speedUp(10);

System.out.println("내차 "+me.name+"의 속도는 "+me.speed+"km");

me.speedUp(30);

System.out.println("내차 "+me.name+"의 속도는 "+me.speed+"km");

me.speedDown(20);

System.out.println("내차 "+me.name+"의 속도는 "+me.speed+"km");

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

Ex02 you = new Ex02(); //너 객체 생성

you.name="스파크";

you.speedUp(50);

System.out.println("너차 "+you.name+"의 속도는 "+you.speed+"km");

you.speedDown(80);

System.out.println("내차 "+you.name+"의 속도는 "+you.speed+"km");

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

Ex02 that = new Ex02("올란도",250); //옆반 객체 생성 //해당 인자값이 있는 생성자로

that.speedUp(40);

that.speedUp(40);

that.speedUp(40);

that.speedUp(40);

that.speedUp(40);

that.speedUp(70);

System.out.println("옆반차 "+that.name+"의 속도는 "+that.speed+"km");

}//main end

public void speedUp(int a){        //스피드 업

if(speed+a<=maxSpeed){

speed += a;

}else { speed=maxSpeed; }

}

public void speedDown(int a){    //스피드 다운

if(speed-a>=0){

speed -= a;

}else { speed=minSpeed; }

}

}//class end

인자값을 받는 생성자를 사용할 경우

기본생성자 또한 반드시 작성해야한다

원래는 생성자는 자동 생성해주지만 이경우에는 자동으로 생성해주지 않는다

결과2

소스

Scanner 간단하게 사용하기

public class Ex03 {

Scanner sc;


public  Ex03(Scanner sc2){ //생성자

sc = sc2;

}

public static void main(String[] args) {

System.out.println("main start");

System.out.print("입력 : ");


Scanner sc = new Scanner(System.in); //모든 결정권이 main 에 있다

Ex03 me = new Ex03(sc);

System.out.println("main>>>"+sc.nextLine()); //입력 받으며 출력

me.func1(); //func1 호출

}//main end

public void func1(){

System.out.println("func1");

System.out.print("입력 : ");

String temp=sc.nextLine(); //func1입력

System.out.println("func1>>>"+temp);

func2();

}

public void func2(){

System.out.println("func2");

System.out.print("입력 : ");

System.out.println("func2>>>"+sc.nextLine()); //func2입력 받으며 출력

}

}//class end

결과


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

DAY11 class 정리/상수화  (0) 2016.07.18
DAY10 업다운 게임  (0) 2016.07.18
DAY9 멤버필드  (0) 2016.07.15
Apache Ant  (0) 2016.07.13
DAY8 클래스 메소드  (0) 2016.07.13

+ Recent posts