절차지향 



객체지향 

(변수 + 함수 / 상속 / 다형성, GOF, 디자인패턴)



프레임워크

(spring)





상속

(어떤 클래스가 다른 클래스의 멤버변수와 멤버함수를 물려 받는 것)

(기존 클래스의 필드와 메소드를 재사용하기 위한 기법)

(기존클래스의 일부 변경도 가능)

(복잡한 GUI 프로그램을 순식간에 작성)


superclass // subclass

부모클래스 // 자식클래스



<is - a 관계>





 public class Car {

      public int speed; 

public int gear;     //3개의 필드 선언

public String color;

                       //3개의 메소드 선언

public void setGear(int gear) 

{

this.gear =  gear;

}

public void speedUp(int increment)

{

speed += increment;

}

public void speedDown(int decrement)

{

speed -= decrement;

}

}

   

 public class SportsCar extends Car {

                  // Car를 상속받는다.

        

public boolean turbo;

                 // 1개의 필드를 추가

public void setTurbo(boolean newValue) {

                //1개의 메소드를 추가


turbo = newValue;

                //터보 모드 설정 메소드

}

}


 public class CarTest {

public static void main(String[] args) {

SportsCar scar = new SportsCar(); 

                                //수퍼클래스 필드 접급


     scar.color = "RED";

     scar.setGear(3); //수퍼클래스 메소드 접근

     scar.speedUp(200);

     scar.setTurbo(true);   //자체 메소드 호출

}

}

   



상속이란.. 

부모클래스로 객체 찍어낸 후, 거기에 이어 붙여서 자식으로 객체 찍어내서 붙여서 하나의 객체를 만들어 내는 것.


class Parent{

      int data = 100;

public void print(){

System.out.println("부모임");

}

}

class Child extends Parent{

int data = 200;

public void print(){        //메소드 재정의

int data = 300;

super.print();

System.out.println("자식임");

System.out.println("data : " + data);

System.out.println("this.data : "+ this.data);

System.out.println("super.data : "+ super.data);

}

}

public class ParentTest {

public static void main(String[] args) {

new Child().print();

}

}

 




class Parent{

       int data = 100;

public Parent(int data){

System.out.println("Parent의 기본생성자");

this.data = data;

}

class Parent{

public void print(){

System.out.println("부모임");

}

}

class Child extends Parent{

int data = 200;

public Child(){

super(200);                //부모클래스에 기본생성자가 없다면.

                // 자식 생성자에 숨어있는 super()가 

                //동작X, 명시적으로 매개변수 맞춰서

                //부모 생성자를 호출해줘야됨. 



부모클래스의 private는 접근불가 // protected는 외부에서는 접근불가, 같은패키지와 자식클래스는 접근가능


public class Employee {

public String name;

private int RRN;

protected int salary;

protected int getSalary(){

return salary;

}

protected void setSalary(int salary){

this.salary = salary;

}

}

 public class Manager extends Employee{

private int bonus;

public int getSalary(){              //메소드의 가시성을 증가시키는 것은 가능.

return salary + bonus;   //protected 멤버인 salary는 접근가능.

}

private void setSalary(int salary){

super.salary = salary;        //오류! 메소드의 가시성을 줄이면 안된다.

}

public void serRRN(int rrn){

RRN = rrn;              //오류! private는 서브클래스에서 접근불가.

}

}



키워드 final을 붙이면 상속이나 재정의(@Override)를 할 수 없다.






객체지향에서의 다향성


전제 : 부모클래스의 참조변수로 자식클래스의 객체를 참조할 수 있음(자식클래스의 객체에는 부모클래스로 만든 객체를 포함하닌까)


- 부모클래스의 참조변수로 자식클래스 객체를 참조했을때는 부모클래스의 존재하는 멤버에만 접근가능


- 부모클래스의 참조변수로 자식클래스의 객체를 참조해서 부모클래스에 존재하는 멤버함수 호출 시 자식클래스에서 

해당 메소드를 오버라이딩 했다면 실제 호출되는 함수는 자식에서 오버라이딩한 메소드가 호출됨(동적 바인딩)




public class Shape {

protected int x,y;

public void draw(){

System.out.println("도형을 어떻게 그려 ㅋ");

}

}

 public class Rectangle extends Shape {


private int width, height;


public int getWidth() {

return width;

}


public void setWidth(int width) {

this.width = width;

}


public int getHeight() {

return height;

}


public void setHeight(int height) {

this.height = height;

}


@Override

public void draw() {

System.out.println("사각형을 그립시담.");

}

}

 public class Triangle extends Shape {

private int base, height;


public int getBase() {

return base;

}

public void setBase(int base) {

this.base = base;

}

public int getHeight() {

return height;

}

public void setHeight(int height) {

this.height = height;

}

@Override

public void draw() {

// TODO Auto-generated method stub

System.out.println("삼각형을 그립시닷");

}

}

 public class Circle extends Shape {


private int radius;


public int getRadius() {

return radius;

}

public void setRadius(int radius) {

this.radius = radius;

}

@Override

public void draw() {

System.out.println("원을 그립시당");

}

}


 public class ShapeTest {

public static void main(String[] args) {


// Shape s = new Rectangle();

// //Rectangle이 Shape를 상속받았고

// //Shape가 print()메소드를 정의했으므로 호출가능

// s.print();

//

// //Rectangle에는 setWidth(int) 메소드가 존재하지만

// //부모클래스 참조변수로 참조했을때는 Shape에도 존재하는 멤버만 접근가능

// s.setWidth();

//

// //draw는 Shape가 정의했으므로 접근 가능하고

// //Rectangle이 오버라이딩 했으므모 실제 실행되는 함수는 Rectangle의 draw(동적바인딩)

// s.draw();

Shape[] shape = new Shape[3];

shape[0] = new Rectangle();

shape[1] = new Circle();

shape[2] = new Triangle();

for(int i = 0; i< shape.length; i++ )

shape[i].draw();

}

}


' IOT 기반 응용 SW과정 > Java, Eclipse ' 카테고리의 다른 글

Day15 전략패턴  (0) 2016.04.01
Day 14 형변환 , 추상클래스  (0) 2016.03.31
Day12 변수  (0) 2016.03.29
Day11  (0) 2016.03.28
Day10 public/private  (0) 2016.03.25

지역변수 : 메소드내에서 생성하는 변수 -> 메소드 종료시 사라짐, 스택영역에 생성됨.






멤버변수(필드) = 인스턴스변수 : 클래스 내부에 정의, 해당 클래스가 객체화 될때마다 각 객체내에 생성됨, 

  해당 객체가 소멸될때 같이 사라짐.







정적변수 = 클래스변수 : 모든객체를 통틀어서 하나만 있는변수 , 해당클래스로 객체를 하나도 안만들었어도 1개만 존재하고 

객체를 계속 만들어도 1개만 존재. 클래스 내부에 static 키워드를 포함해서 정의하며, 프로그램이 실행될때 생성되서, 

프로그램이 종료될때 사라짐.





public static int numberOfCars; //  private static int numberOfCars;






정적메소드의 활용용도 - > 정적변수에 대한 게터,세터를 만들거나 객체의 상태와 상관없는 동작을 수행하는 메소드를 정의할때 사용.

                                       정적 함수에서는 멤버변수에 접근할수 없음.





toString이 우리가 만들지 않아도 원래 존재함, 해당 객체가 문자열화 될때 어떻게 문자열로 바뀔지를 결정하는 기능, 이미 존재하지만 똑같은 이름으로 toSring을 다시 만들어주면, 해당 객체가 문자열화 될때 우리가 정의한 내용에 맞게 문자열됨.


finalize도 원래 존재함, 객체가 소멸되기 직전에 호출되는 메소드, 우리가 똑같은 이름으로 다시 정의하면 해당객체가 소멸될때 우리가 정의한 함수내용을 실행함.


System.gc();

System.runFinalization(); // 가비지컬렉터를 강제로 일시키기 (사용x)


this : 자기 자신을 참조하는 키워드







//* 곱셈 실수부 -> (a*c) - (b*d)    나눗셈 실수부 ->(a*c)/(c*c+d*d) + (b*d)/(c*c+d*d)

   곱셈 허수부 -> (a*d) + (b*c)    나눗셈 허수부 ->(a*d)/(c*c+d*d) - (a*d)/(c*c+d*d) *//

 






' IOT 기반 응용 SW과정 > Java, Eclipse ' 카테고리의 다른 글

Day 14 형변환 , 추상클래스  (0) 2016.03.31
Day13 상속  (0) 2016.03.30
Day11  (0) 2016.03.28
Day10 public/private  (0) 2016.03.25
Day09 객체지향  (0) 2016.03.24

참조변수에 아무것도 넣지않으면 null // 









데브피아 :: 개발자 천국을 꿈꾸는 국내 최대의 SW 포탈

www.devpia.com/


OKKY - All That Developer

okky.kr/


안드로이드 펍 : 안드로이드 폰 사용자와 개발자 모임

www.androidpub.com/


게임코디 :: 게임프로그래머 만담 모임

www.gamecodi.com/





멤버변수 , 멤버함수 : 클래스를 구성하는 구성요소로 클래스를 통해 객체를 생성하면, 각 개체마다 멤버변수와 멤버 함수들이 생성


인스턴스 변수 (instance variable) : 객체마다 하나씩 있는 변수

정적변수 (static variable) : 모든 객체를 통틀어서 하나만 있는 변수

 -> 멤버변수와 다르게 객체를 생성하지 않아도, 아무리 많이 생성해도 하나만 존재하는 변수











[출처] 정적 변수|작성자 아프라카



클래스와 클래스 간의 관계

사용(use) : 하나의 클래스가 다른 클래스를 사용한다.

집합(has-a) : 하나의 클래스가 다른 클래스를 포함한다.

상속(is-a) : 하나의 클래스가 다른 클래스를 상속한다.



' IOT 기반 응용 SW과정 > Java, Eclipse ' 카테고리의 다른 글

Day13 상속  (0) 2016.03.30
Day12 변수  (0) 2016.03.29
Day10 public/private  (0) 2016.03.25
Day09 객체지향  (0) 2016.03.24
Day 08 정렬  (0) 2016.03.23





멤버변수(필드)의 수식어에는 public/private을 줄 수있음. private 수식어가 붙은 멤버는 클래스 외부에서 접근불가






getter/setter를 쓰는이유 : 1. 외부에서 남의 데이터를 직접 접근하는 것을 막기 위해서

         2. 세분화된 접근제어(읽기전용/쓰기전용/둘다됨/둘다안됨) ex) getter만 만들고 setter를 안들면 해당 변수는 읽기전용

         3. 입력값에 대한 검증이 가능



getter 만들기


수식어는public 

반환유형은 내가 getter되고자 하는 변수의 타입

메소드명은 get변수형

매개변수 없음

몸통: return 변수;


setter 만들기 


수식어는 public 

반환유형은 void 

메소드명은 set변수명 

매개변수 : 내가 setter가 되고자하는 변수와 같은 타입의 매개변수 한개

몸통: {내가 setter가 되고자하는 변수} = 매개변수;



메소드 오버로딩 -> 함수이름이 같은데 매개변수가 다른 두개이상의 함수를 정의하는것.




이클립스는 외부 프로그램을 이클립스에 연동해서 사용할 수 있도록 플러그인 인터페이스를 제공, 

외부 프로그램은 이클립스의 플러그인 인터페이스를 준수해서 프로그램을 작성하면 이클립스와 연동해서 이클립스 상에서 사용할 수 있음.


이클립스에 플러그인을 설치하는 방법 :


1. 마켓에서 줍줍

2. 설치 url을 먹이거나

3. 이클립스 폴더안에 쳐박기.


ex)  UML (Unified Modeling Language) - - - - - -ObjectAid UML Explorer







생성자(contructor) : 객체가 생성될 때에 필드에게 초기값을 제공하고 필요한 절차를 실행하는 메소드;

생성자의 특징 : 수식어는 왠만하면 public // 문법적으로 반환유형 자체가 없음 // 얘도 메소드닌까 오버로딩이 가능 //

                      생성자메소드명은 클래스명과 동일


생성자를 하나도 정의 하지 않았을 경우에는 몸통이 텅 비어있는 기본생성자를 컴파일러가 끼워 넣음.


//%02d -> 2칸쓰는데 없으면 0






' IOT 기반 응용 SW과정 > Java, Eclipse ' 카테고리의 다른 글

Day12 변수  (0) 2016.03.29
Day11  (0) 2016.03.28
Day09 객체지향  (0) 2016.03.24
Day 08 정렬  (0) 2016.03.23
Day 07 배열  (0) 2016.03.22

+ Recent posts