입력/출력 -> 우리가 만드는 프로그램이 할당 받을 메모리 외부와 데이터를 주고 받음.

IO (Input/Output) : 자바에서 데이터는 스트림(Stream)을 통해 입출력 됨.


Stream : 순서가 있는 데이터의 연속적인 흐름

바이트(Byte) 기반 스트림 > 문자(character) 기반 스트림


바이트 기반 스트림 

문자 기반 스트림 

 입력 바이트 스트림

(...InputStream)

출력 바이트 스트림

(...OutputStream) 

입력 문자 스트림

(...Reader)

 출력 문자 스트림

(...Writer)


파일의 경로

절대경로 : 최상위 루트로부터의 경로

상대경로 : 현재 내 위치로부터의 경로

정규경로 : 최단거리 절대경로

import java.io.*;

public class FileStreamTest {

public static void main(String[] args) {

FileInputStream in  = null;

FileOutputStream out = null; //사용할 스트림 객체를 참조할 참조변수 선언

try{  //예외처리 프레임 작성   // File타입의 객체/ FileDexcriptor / String타입의 파일정보 중에 하나

out = new FileOutputStream("data.txt");

for(int i = 0; i < 10; i++)

out.write(i);

in = new FileInputStream("data.txt");  //파일의 경로(절대경로, 상대경로, 정규경로)

int c;

while ( (c= in.read()) != -1)

System.out.println(c);

//사용할 스트림 객체를 생성

//문자열로 주려면 내가 목적지로 사용할 파일의 경로를 써주면됨

} //생성자에는 목적지 파일에 대한 정보를 담아야함

catch(IOException e)

{

e.printStackTrace();

}

finally{

try{//스트림은 쓰면 닫아줌

if(out != null)    //try구문에서 객체 생성하다 예외가 나오면 finally 구문에서 참조변수가

out.close(); //null이어서 멤버함수 close를 접근하면 NullPointerException이 발생할 수 있으므로 조건 검사

if(in != null)       

in.close();

} catch(IOException e){

e.printStackTrace();

}

}

}

}


데이터 싱크 스트림 

 데이터 처리 스트림

 데이터를 소스에서 읽거나 

목적지에 기록

들어오는 데이터를 가공하여 내보낸다


buffer는 바가지, 바가지의 크기는 기본 8192, 바가지가 꽉 찼는데 새로운 데이터가 들어오면 바가지에 있는 데이터를 처리

flush() : 현재 바가지에 있는 데이터를 강제로 처리하기


직렬화(serialization) : 객체가 가진 데이터들을 순차적인 데이터로 변환하는것




AWT - > 운영체제로부터 그래픽 자원을 빌려와 GUI 구현

Swing -> 자바 안에 독립적인 UI 컴포넌트 자원을 내포


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

Day22 TCP  (0) 2016.04.12
Day21 입출력 / 네트워크 프로그래밍  (0) 2016.04.11
Day19 스레드  (0) 2016.04.07
Day18 예외처리  (0) 2016.04.06
Day17 제네릭과 컬렉션  (0) 2016.04.05

스레드(thread) : 프로그램의 명령처리 흐름

프로세스 : 프로그램 실행의 최소 단위 (프로세스는 최소 하나의 스레드를 가짐)


병렬처리 : (두개이상의 명령문장을 동시에 수행)


병렬처리를 구현하는 방법

1. 다중 프로세스   

: 다중 프로세스는 각 프로세스가 별도의 메모리 공간을 할당 받기 때문에 각 프로세스간에 데이터를 어떻게 주고 받을 것 인지가 이슈(IPC)

2. 다중 스레드

: 다중 스레드에서는 각 스레드(명령처리흐름)들이 하나의 프로세스안에서 공통된 메모리 공간을 공유하기 때문에 교통정리가 이슈


스레드 클래스 상속 방법

스레드는 Thread 클래스가 담당 -> 파생 스레드 ->run함수를 한번 실행하는 작업을 수행

Thread객체의 start메소드가 호출되면 새로운 명령처리흐름이 생성됨

프로그램이 실행되면 처음 만들어지는 기본스레드(main thread)는 메인함수를 한번 실행하는 작업을 수행


Runnable 인터페이스를 구현하는 방법




class CountDownThread implements Runnable {

public void run() {

for (int i = 20; i > 0; i--) {

System.out.println(i);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

public class RocketTest {

public static void main(String[] args) {

Thread t1 = new Thread(new CountDownThread());

Thread t2 = new Thread(new Test2());

t1.start();

t2.start();

}

}

       




동기화 : 한 번에 하나의 스레드 만이 공유 데이터를 접근할 수 있도록 제어하는 것이 필요

synchronized : 한순간에 하나의 스레드만을 허용

wait() : 대기소 가서 잠자는 아이

notifyAll() : 대기소 가서 잠자는애 깨우기


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

Day21 입출력 / 네트워크 프로그래밍  (0) 2016.04.11
Day20 입출력  (0) 2016.04.08
Day18 예외처리  (0) 2016.04.06
Day17 제네릭과 컬렉션  (0) 2016.04.05
Day16 패키지  (0) 2016.04.04

예외 : 런타임 에러, 프로그램 실행 중 어떤 이유로 뻗는거 // 잘못된 코드, 부정확한 데이터, 예외적인 상황에 의하여 발생하는 오류


예외처리 : 런타임에러가 생겼을때 어떻게 대응할지에 대한 명세를 작성해 주는거-> 그러면 예외가 발생해도 프로그램이 뻗지 않고 계속 동작.


예외의 종류 3 : Error (시스템에서 발생) // RuntimeException (선택적으로 예외 처리) // IOException (예외 처리 필수)


체크 예외 : 컴파일러가 예외 처리를 강요

비체크 예외 : 컴파일러가 신경 안쓰는 예외






public static String readString() throws IOException{

//해당 함수의 몸통안에 IOExeption을 발생시키는 코드를 예외처리하지 않고 사용가능//해당 함수를 호출하는 녀석은 IOException에 대한 책임을 가짐




class DivideByZeroException extends ArithmeticException{

public DivideByZeroException()

{

super("0으로 나눌수는 없음.");

}

}

public class ExceptionTest {

public static void main(String[] args) {

double result;

try{

result = quotient(1,0);

}

catch(DivideByZeroException e){

System.out.println(e.toString());

}

}

public static double quotient(int n, int d)

throws DivideByZeroException

{

if( d == 0)

throw new DivideByZeroException();

return(double) n/d;

}

}



finally 블록의 절대적 필요성은 try나 catch구문에서 함수 return등으로,, 이 다음 코드로 진행이 아닌 경우 처리해야 될 코드를 수행하기 위해



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

Day20 입출력  (0) 2016.04.08
Day19 스레드  (0) 2016.04.07
Day17 제네릭과 컬렉션  (0) 2016.04.05
Day16 패키지  (0) 2016.04.04
Day15 전략패턴  (0) 2016.04.01

제네릭이란?

제네릭 프로그래밍

* 일반적인 코드를 작성하고 이 코드를 다양한 타입의 객체에 대하여 재사용하는 프로그래밍 기법

* 제네리은 컬렉션 라이브러리에 많이 사용


컬렉션(collection)은 자바에서 자료 구조를 구현한 클래스


자료구조(데이터집합) 

* 맵(map) : 사전과 같은 자료구조

* 리스트(list) : 순서가 있는 데이터들의 집합

* 스택(stack) : 순서있는 데이터들의 집합을 LIFO방식으로 관리하는 자료구조

* 큐(queue) : 순서가 있는 데이터들의 집합을 FIFO방식으로 관리하는 자료구조

* 집합(set) : 순서가 없는 데이터들의 집합(중복없음) { HashSet }



List 인터페이스 

* ArrayList 클래스 : 빈번한 탐색시 유리, 데이터가 삽입,삭제 될때 마다 새로운 배열을 생성

* LinkedList 클래스 : 빈번한 삽입 삭제시 유리, 데이터가 삽입,삭제 될때 해당 칸만 추가,삭제 하고 기억위치만 변경





import java.util.LinkedList;

import java.util.List;


public class ArrayListTest {

public static void main(String[] args) {

List<String> list = new LinkedList<String>();

list.add("MILK");

list.add("BREAD");

list.add("BUTTER");

list.add(1,"APPLE");

list.set(2, "GRAPE");

list.remove(3);

for(int i = 0; i< list.size(); i++)

System.out.println(list.get(i));

}

}










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

Day19 스레드  (0) 2016.04.07
Day18 예외처리  (0) 2016.04.06
Day16 패키지  (0) 2016.04.04
Day15 전략패턴  (0) 2016.04.01
Day 14 형변환 , 추상클래스  (0) 2016.03.31

패키지



정의 : 연관된 클래스들을 묶는 기법. 


장점 : 관련된 클래스들을 쉽게 파악, 클래스 쉽게 찾을 수 있음


같은 클래스 이름을 여러패키지가 사용가능, 패키지별 접근 제약 가능



이름 : 인터넷 도메인 이름을 역순으로 사용한다. ex) com.company.test라는 패키지 이름은 도메인 이름 company.com에서의 test라는 프로젝트를 의미



소속된 패키지 없음 : 디폴트패키지 혹은 현재 작업하는 소스파일과 같은패키지가 아닌 곳에 위치한 클래스를 사용하려면 풀패키명으로 접근 혹은 import를 해야됨.








public class Test {

public static void main(String[] args) {

System.out.println(System.currentTimeMillis());

System.out.println(System.nanoTime());

System.exit(0);

}  

}





import java.util.Scanner;


public class Test2 {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.println("몇번째꺼 구할래?");

int num = scan.nextInt();

int n1 = 0;

int n2 = 1;

int n3 = 0;

long start = System.currentTimeMillis();

for(int i = 3; i <= num; i++){

n3 = n1 + n2;

n1 = n2;

n2 = n3;

System.out.println(n3);

}

long end = System.currentTimeMillis();

long gap = end - start;

System.out.println("걸린시간 : "+ gap + "ms");

System.out.println(num + "번째 피보나치수 : "+ n3);

}

}




import java.util.Scanner;


public class Test3 {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.println("두 수를 입력하시오");

String n1 = scan.nextLine();

String n2 = scan.nextLine();

int num1 = Integer.parseInt(n1);

int num2 = Integer.parseInt(n2);

int result = num1 + num2;

System.out.println(result);

}

}






public class Hello {

public static void main(String[] args) {

StringBuffer sb = new StringBuffer();

sb.append("Hello");

sb.append(" world");

sb.append("\n");

sb.append("Welcome");

sb.append(" to hell");

String str = sb.toString();

System.out.println(str);



 public class Hello {

public static void main(String[] args) {

StringBuffer sb = new StringBuffer();

  //StringBuilder = new StringBuilder();

String str = sb.append("Hello")

.append(" world")

.append("\n")

.append("Welcome")

.append(" to hell")

.toString();

System.out.println(str);


메소드 체인기법 = 빌더패턴 : 메소드의 반환값이 자기자신객체, 그래서 메소드 호출 결과에 다시한번 메소드 호출을 반복





import java.text.SimpleDateFormat;

import java.util.Date;


public class DateTest {

public static void main(String[] args) {

// Date d = new Date();

// System.out.println(d);

// System.out.println(d.getTime());

// Date.dd = new Date(System.currentTimeMillis());

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:hh.mm.ss");

String str = sdf.format(new Date());

System.out.println(str);

// System.out.println(d.getYear() + 1900);

// System.out.println(d.getMonth() + 1 );

// System.out.println(d.getDate());

//

// d.setHours(12);

// d.setMinutes(00); //시간정보를 관리할 객체타입은 util.Date

// d.setSeconds(38);  // 직접 시분초 연월일을 접근/조작 no

//Date타입의 시간 -> timemillis시간 -> 문자열시간

// <- <-

// System.out.println(d);

}

}





//Date 객체 -> Calendar 객체로 

//c.set(new Date());


//Calendar 객체 -> Date 객체

//Date d = c.getTime();




import java.util.Scanner;

import java.util.StringTokenizer;


public class Token {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.println("아이디와 입력을 하시오 : ex) iddd//pwww");

String idpw = scan.nextLine();

// StringTokenizer st = new StringTokenizer(idpw, "//");

// System.out.print("당신의 아이디는 " + st.nextToken()+ "이고");

// System.out.println(" 비번은 "+ st.nextToken()+ " 입니다.");

String[] str = idpw.split("//");

System.out.print("당신의 아이디는 " + str[0]+ "이고");

System.out.print(" 비번은 "+ str[1]+ " 입니다.");





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

Day18 예외처리  (0) 2016.04.06
Day17 제네릭과 컬렉션  (0) 2016.04.05
Day15 전략패턴  (0) 2016.04.01
Day 14 형변환 , 추상클래스  (0) 2016.03.31
Day13 상속  (0) 2016.03.30

템플릿 메소드 패턴



//부모클래스에서 템플릿에 해당하는 메소드(fight)가 정의되있고 fight 내용중 세부 attack,move하는 기능에 대한 정의는 추상메소드로 남겨둔채


//자식클래스에서 세부 attack,move를 구현해서 템플릿을 완성하는 방법


package d02;


public abstract class Robot {

protected String name;

public void fight(){

System.out.println(name +  "가 전투를 시작합니다.");

attack();

move();

attack();

System.out.println(name + "가 전투를 종료합니다.");

}

public abstract void attack();

public abstract void move();

}

---------------------------------------------------------------

package d02;


public class TaekwonV extends Robot{


// String name = "태권브이";

public TaekwonV(){

name = "태권브이";

}

public void attack(){

System.out.println("펀치로 공격!");

}

public void move(){

System.out.println("날아서 이동!");

}

}


전체 윤곽인 구조(템플릿)에 대한 재사용은 잘 이뤄지지만, 세부구형기능에 대한 재사용은 이뤄지지 않음.


기능을 재사용하려면, 일단 기능을 분리해야됨. <-- 기능을 구현하는 독립적인 클래스로 구현.



단일 책임 원칙 : 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다.




단일 책임 원칙의 장점 단일 책임 원칙을 지키려고 하다 보면 인터페이스 등을 도입하게 되며여러 디자인 패턴을 적용해서 설계를 우아하게 만들게 된다그러면서 자연스럽게 모듈간의 결합이 느슨해진다이것은 어떤 변경이 필요할 때 수정 대상을 명확하게 하는 결과를 가져온다.


의존 관계 역전 원칙 :  소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다. 이 원칙을 따르면, 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존 관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.


리스코프 치환 원칙 : 컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다는 원칙이다. 



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

Day17 제네릭과 컬렉션  (0) 2016.04.05
Day16 패키지  (0) 2016.04.04
Day 14 형변환 , 추상클래스  (0) 2016.03.31
Day13 상속  (0) 2016.03.30
Day12 변수  (0) 2016.03.29

형변환


부모클래스타입으로 자식객체를 참조했을때는 부모클래스에 존재하는 멤버변수와 멤버함수만 접근이 가능,자식영역에만 존재하는 멤버에 접근불가


자식클래스로의 형변환을 통해 자식에만 존재하는 멤버에 접근가능




* instanceof 연산자를 사용한다. *


[참조변수] instanceof [클래스명]   ->  참조변수가 실제 참조하고 있는 객체가 클래스명 타입의 변수로 참조가 가능하면 true 아님 false







추상클래스


추상메소드를 가지고있는 클래스

자바에서의 추상메소드는 abstract 키워드를 붙여준다.


(부모클래스일수록 개념이 추상적이고, 특정 기능이 어떻게 구현될지 애매하다.) 


추상클래스는 상속받으면 추상메소드를 구현해야만 하는 의무를 가지게 됨.

(추상메소드를 구현하던, 자기 자신이 추상클래스가 되던)


추상클래스는 미완성의 설계도 이기 때문에 객체를 만들 수 없을(객체화 할 수 없음)




내부클래스


클래스 안에 다른 클래스를 정의




//바깥 클래스

class A {

A(){System.out.println("A 객체가 생성됨");}

/**인스턴스 멤버 클래스**/

class B {

B(){System.out.println("B 객체가 생성됨");}

int field1;

//static int field2;

void method1(){}

//static void method2() {}

}

//정적 멤버 클래스

static class C {

C() {System.out.println("C 객체가 생성됨");}

int field1;

static int field2;

void method1(){}

static void method2(){}

}

void method(){

//로컬 클래스

class D {

D(){System.out.println("D 객체가 생성됨");}

int field1;

void method1(){}

}

D d = new D();

d.field1 = 3;

d.method1();

}

} 

 


public class Main {

public static void main(String[] args) {

A a = new A();

//인스턴스 멤버 클래스 객체 생성

A.B b = a.new B();

b.field1 = 3;

b.method1();

//정적 멤버 클래스 객체 생성

A.C c = new A.C();

c.field1 = 3;

c.method1();

A.C.field2 = 3;

A.C.method2();

//로컬 클래스 객체 생성을 위한 메소드 호출

a.method();

}

}







무명 클래스(anonymous class)


클래스 몸체는 정의되지만, 이름은 없는 클래스

객체를 생성하면서 클래스를 정의하는 방법(1회성 클래스 구현)


interface RemoteController

{

void turnOn();

void turnOff();

}

class TVRemoteController implements RemoteController{


@Override

public void turnOn() {

}


@Override

public void turnOff() {

}

}


public class AnnonymousTest {

public static void main(String[] args) {

RemoteController rc = new TVRemoteController();

}

}




인터페이스 타입의 참조변수는 자신 인터페이스를 implements한 클래스의 객체를 참조할 수 있음.


대신에 인터페이스 타입의 참조변수로 객체를 참조했을때는 인터페이스에 존재하는 메소드만 호출이 가능.









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

Day16 패키지  (0) 2016.04.04
Day15 전략패턴  (0) 2016.04.01
Day13 상속  (0) 2016.03.30
Day12 변수  (0) 2016.03.29
Day11  (0) 2016.03.28

절차지향 



객체지향 

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

+ Recent posts