작성자 : 코로세

작성자 : 코로세

' IOT 기반 응용 SW과정 > Group Studying' 카테고리의 다른 글

5. 쓰레드  (0) 2016.06.17
은행 관리 프로그램  (0) 2016.06.14
4. 기본 API  (0) 2016.06.09
3. 상속, 인터페이스  (0) 2016.06.09
1. Java의 특징, 변수와 타입, 연산자  (0) 2016.06.09

절차지향 



객체지향 

(변수 + 함수 / 상속 / 다형성, 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

<객체지향> 관련있는 변수와 함수를 하나의 꾸러미로 묶어서 관리, 실제 세계를 모델링하여 소프트웨어를 개발하는 방법 ;

객체 : 힙영역에 할당되있는 모든 데이터 (new연산자를 이용해 만들어진 데이터) 

객체의 상태(state) : 객체의 특징값(속성) = 변수(필드)이다.

객체의 동작(behavior) : 객체가 취할 수 있는 동작 = 함수(메소드)

 

클래스 : 관련있는 함수와 변수를 조합해 만든 자료형 -> 객체란 클래스를 통해 생성해낸 데이터

         


<객체 지향 프로그래밍(Object-Oriented Programming, OOP)>은 컴퓨터 프로그래밍의 패러다임의 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다 


출처 : https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D




<구조체 : 다른 타입의 변수들의 묶음 자료형> -> 사용자 정의 자료형

// 배열 : 같은 타입의 변수들의 묶음 자료형





class Student{

int age;

int score; //Student 타입으로 데이터를 한번 생성하면 그안에는

String name;         // 그안에는 정수변수 두개 문자열변수 한개의 조합된 데이터가 만들어짐

}


public class StructTest {

public static void main(String[] args) {

// Student s;//우리가 만든 데이터타입 Student라는 타입의 변수 s를 생성

Student s = new Student();   //-Student데이터의 위치가담김

               s.age = 10; s.score = 100; s.name = "학생1"; System.out.println("나이 : "+ s.age); System.out.println("점수 : "+ s.score); System.out.println("이름 : "+ s.name); } }



<함수(메소드) : 명령어들의 집합>



public static void 그림그리기명령어집합(){

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

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

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

} // 나중에 또 사용될 가능성이 많은 코드들에 이름을 지어주면 재활용하기 쉬움



public static void 그림그리기명령어집합(){

String name ="??";

name ="학생1";

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

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

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

System.out.println("그림그린사람 : " + name);

name = "학생2";

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

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

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

System.out.println("그림그린사람 : " + name);

name = "학생3";

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

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

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

System.out.println("그림그린사람 : " + name);



그림그리기명령어집합("학생1");

그림그리기명령어집합("학생2");    //인자값 // String name = "학생1" 

그림그리기명령어집합("학생3");


public static void 그림그리기명령어집합(String name){

      //매개변수

//함수 실행 전 매개변수 = 인자값 코드를 수행함

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

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

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

System.out.println("그림그린사람 : " + name);









public class StringTest {

public static void main(String[] args) {

String proverb = "A barking dog";

String s1, s2, s3, s4;

System.out.println("문자열의 길이 = " + proverb.length());

s1 = proverb.concat(" never Bites!");

s2 = proverb.replace('b', 'B');

s3 = proverb.substring(2, 5);

s4 = proverb.toUpperCase();

System.out.println(s1);

System.out.println(s2);

System.out.println(s3);

System.out.println(s4);

}

}




 Object 클래스의 주요 메소드 <-- 모든 자바 클래스들은 Object 클래스로부터 상속받는다.


 메소드

설 명 

 String toString()

 현재 객체의 문자열을 반환한다




객체의 생성

Car    myCar;

myCar = new Car();


1. 참조 변수 선언 : Car 타입의 객체를 참조할 수 있는 변수 myCar를 선언한다.

2. 객체 형성 : new 연산자를 이용하여 객체를 생성하고 객체 참조값을 반환한다.

3. 참조 변수와 객체의 연결 : 생성된 새로운 개체의 참조값을 myCar라는 참조 변수에 대입한다.



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

Day11  (0) 2016.03.28
Day10 public/private  (0) 2016.03.25
Day 08 정렬  (0) 2016.03.23
Day 07 배열  (0) 2016.03.22
Day 06 复习  (0) 2016.03.21

+ Recent posts