상속 - 기존에 있는 객체(부품)를 가져다 사용하기 위한 작업

* 재사용 - 컴파일된 바이너리를 다시 사용 // 소스 코드가 없는 상황에서 jar 파일을 import 시켜 사용

is a -


has a - 'a' 실존하는 객체를 부품(멤버)로써 가진다.

   상속되는 시점에 따라

     - composition has a - 내가 생성될 때 부품이 같이 생성된다.

     - association has a - 주입(인젝션)이 이뤄질때 생성된다.

                         - setter, constructor

     - aggregation has a - 1대 다로 has a 관계를 갖는다.



Is a 상속


<재사용을 극대화 하는 방법>

기존 재사용의 문제

-그대로 가져다가 사용

-만약 조금이라도 다르면 사용하지 못함


Is a 상속은 기존의 부품을 수정 또는 확장해서 사용 할 수 있는 방법이다.


- 클래스를 만들때 다음에 다시 사용 하기 좋도록(Is a 상속이 가능하도록) 만드는 것이 중요하다


frame work - 틀을 가져다가 고쳐 쓰는것




추상화 .

- 여러가지 사물이나 개념에서 “공통”되는 특성이나 속성 따위를 추출하여 파악하는 작용.- 네이버 사전

-공통분모를 만드는 과정



추상화한 클래스는 재사용을 위한 클래스.

단. has a 재사용이 불가능하다.(완전한 클래스가 아니기 때문에)

is a 재사용만 가능하다.


동일한 타입의 부품을 만들어야 할 경우에 추상화를 생각해 볼 수 있다.




-------------------------------------------------------┐

[비행기] <-        |

   △       |

       |

[적기] [아군기] [유람기]

동일한 행동을 한다.

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



추상화된 클래스 또는 부모 클래스가 있을 경우 참조 방법에 모호함.



A a = new A();

A a = new B();

B b = new A(); <- 이건 안됨

B b = new B();


*재사용 되는 모든 부모*는 추상호된 클래스 *특징*을 갖는다.

왜냐하면 큰 범주에서 보면 공통분모가 되니깐

그렇다고 추상 클래스로 만들어진 것(집중화를 위해 만들어진 것)을 의미하지는 않는다.

단. 추상 클래스는 미완성 추상 클래스(집중화를 위해 만들어진 클래스)

와 완전 추상 클래스(기존의 재사용되는 클래스)로 나눌 수 있다.


기존의 클래스와 내가 부모자식 관계가 된다면 참조방법이 다양해 진다.


<- 구체화 클래스     추 상 클래스 ->

6강의장 학생 클래스, 학생 클래스, 사람 클래스 , 동물 클래스, 포유류 클래스, 생물 클래스


<필요한 클래스를 지목 =  만족하는 객체를 지목>

       사람 기선 = new 사람()

       6강의장학생 기선 = new 6강의장학생()

   사람 아무나 = new 6강의장핵생()

   사람 아무나 = new 7강의장학생()


문제

?? 기선 = new 6강의장학생()

위에서 6강의장학생 객체를 참조 할 수 있는 클래스의 개수는? (다 가능)


문제


동물 솔이 = new ??();

위의 식에서 솔이라는 이름으로 참조 할수 있는 개체의 종류는 총 몇개? (4개 동물,사람,학생,6강의장)



프로그래밍, 구조적 프로그래밍, 객체지향 프로그래밍.

재사용은 이미 만들어진것을 다시 사용 하는 것(소스 코드 재사용X)


객체지향 - 캡슐화 -> 상속 -> 다형성




다형성->추상화



오버 라이드! 한것 우선으로 호출된다



정적 바인딩, 동적 바인딩


자바는 동적 바인딩을 사용한다.


객체가 전달 되면서 함수목록을 제출???


객체들은 자기 주소를 가지고 간다.





다형성 - 다양한 용도로 써먹을 수 있는 성질

어떤 클래스를 다양하게 써먹을 수 있도록 작성할 수 있는 능력을 갖는데 있다.



인터페이스





행위는 같지만 근본이 다른놈?


참조는 공간만 참조.

String 클래스(모든 클래스는 object이다.)


자바는 완전한 객체지향이다.

(Boxing과 UnBoxing)


Integer x = 3; => Integer x = new Integer(3);

일케 쓰면      컴파일러가   일케 만들어준다.


값을 참조할수 있도록 박싱(뤱(wrap)픵 yoyo )

요즘은 오브젝트에 그냥 값만 넣어도 알아서 만들어줌 ( 오토 빡싱)


Object x= 3;   => Object x = new Integer(3);

int y = x;(초창기엔 에러가 났는데 요즘은 안난다 오토 언빡싱)


Object x= 3;   => Object x = new Integer(3);

add(x,4);  x 에 참조가 아닌 값이 전달됨.

Boxing에 사용되는 Wrapper 클래스


Object ──── ① Number : Byte, Short, Long,Integer등등

                      ② String


int a = 3.intValue(); ---> 앙대요  < 요게 안대거

new Integer(3).intValue();---->되요

객체로 만들어줘서 나오는거        that’s yes yes ㅎㅇ

int b = “hello”.length(); -->되요


String 객체의 ‘+ (덧셈)‘ 은 미리 연산자 오버로딩이 된 메소드이다.


제어 구조

- 흐름(절차)을 제어하는 것

선택문 > 반복문 > 분기문


선택문 : if-else - 배타적인 관계로(검사 할 때 많이 사용함) (유효한 값의 범위 : 도메인)

반복문 : while - 조건이 거짓이 될 때까지 반복 (반복 검사)

for - 원하는 만큼의 반복

분기문 : 많은 선택지(비교)를 갖게 되는 선택문 (else-if)의 단점 때문에 분기문을 사용.


파일 입출력

* 콘솔을 이용한 입출력은 객체가 이미 지정되어있지만 파일 입출력은 stream 객체를 지정해 주어야한다.

FileOutputStream fos = new FileOutputStream(“d:\\test.txt”);  // import + 예외처리

fos.write(‘A’);

fos.flush();

fos.close();

* 버퍼는 약 8kb의 크기를 가지고 있다.


배열

입력 -> 데이터 -> 출력의 과정에서 저장소의 필요성이 생김

장점 : 일괄적으로 데이터를 처리할 수 있다. (반복문 사용)


FileInputStream.read(public int read(byte[] b, int off, int len) --> off부터 시작해서 ‘len’바이트를 읽는다.



역참조 연산?



모듈화



스택


동적 할당 - heap 영역


static

인스턴스메소드 (스태틱X) - 객체명을 통해 호출 된다.



캡슐화 - 데이터구조/함수를 묶어놓는것

왜? 캡슐화 된 데이터/함수에 구조가 바뀌게 되었을때 유지보수를 편하게 하기 위해.

캡슐이 실체화되면 객체.


생성자 - 객체가 생성될 때 가장 먼저 실행됨, 입력 O 출력 X

데이터를 초기화 하기 위함 (클래스이름과 동일한 함수명 사용, 반환타입 X)


오버로딩 - 함수명이 중복되었을때

인자가 없는 쪽이 기본, 인자가 있는 쪽이 중복된다고 본다.

this 키워드 -- 오버로딩이 된 함수가 있을 때 this() 키워드를 통해 인자를 전달하여 다른 오버로딩된 메소드를 호출 할 수 있다.

연산자 정리…



코딩을 하면서 여러가지 복합적인 연산을 해야 하는 경우가 있을때 기본적으로 알고 있어야 할 사항 들이다


외우지 못해도 좋다 연산자의 연산 우선순위라는게 존재한다는 것만 알아두면 필요할때 검색하거나 이렇게 찾아서


사용하면 되니까.



문자열 입력


1.숫자 입력

출력 코드 위에다가 각 숫자를 입력하는 코드가 필요

(입력을 하기 위해선 출력문이 필요)

입력버퍼(System.in 입출력은 너무 자주사용하여 정의 해놓았다.)

System.in = new ConsoleInputStream();

int key = System.in.read();

입력을 하기 위해선 입력 버펴에 하나씩 쌓이게 된다.

엔터를 만날때 까지 자료형을 변환해주는 메소드가 존재

next()

nextLine()->하나의 줄을 받아서 변환

nextInt()->스페이스 전까지의 숫자를 변환  >

ex)”30 40 50”을 입력시 30 하나만을 가져오고 버퍼에는 “40 50”이 남아있게 된다.

nextfloat()

Scanner = 문자를 입력할 수 있게 하는 도구 ex)핸드폰

new = 개체화

Scanner scan = 도구는 이름을 붙여 주어야 한다

System.in = 입력 버퍼에 값 전달/종속 객체 ex)배터리

  (배터리를 핸드폰에 주입한다.->즉 System.in을 Scanner에 주입한다.)


Scanner : 입력 버퍼에서 값을 스캔하는 것 ex) Scanner scan = new Scanner(System.in);

PrintWriter > OutputStream

OutputStream write/flush를 보다 전문적으로 출력해주는 print메소드를 사용함.

메소드라는건 어떠한 기능을 구현하기 위해 특정 로직을 만들어 놓은 것임


printf 특수문자 (이스케이프 시퀀스 escape sequence)

특수문자

의미하는 바

\a

경고음

\b

백스페이스

\f

폼 피드(form feed)

\n

개 행(new line)

\r

캐리지 리턴(carriage return)

\t

수평 탭

\v

수직 탭

\'

작은 따옴표 출력

\"

큰 따옴표 출력

\?

물음표 출력

\\

역슬래쉬 출력

\n    /    \”      /   \\ ->중요


가끔씩 자바에서 텍스트 출력을 해야 할때 줄바꿈(개행)이라던지 따옴표를 출력해야 할때 난감한 경우가 있는데

이때 \라는 이스케이프 문자열을 사용해서 컴퓨터에게 이 다음건 그냥 단순히 텍스트일뿐이니 그대로 출력해줘

라고 알려주는 것이다.


참고)

print=>문자열 출력

println => 개행처리하여 출력  ( \n이랑 똑같은 역할)

printf(“형식”,넣을 함수)=> format을 지정하여 값만 넣어줌


* 형식 지정자 (printf)

포맷을 이용한 출력

ex) printf("%s,%d,&f,%c","hello",3,5.6,'a');

*****************printf는 개행을 \n을 써서 해주어야 한다,

ex)System.out.printf(" %d ,%d ,%d ,%d ,%2.0f \n",kor,eng,math,total,avg);


. 파일 출력과 콘솔 출력 방법은 같다. 네트워크 출력도 같다.(버퍼사용)


고정길이 출력

%10d : 앞 10자리 차지 ex)                      3

%-10d : 뒤 10자리 차지 ex) 3                    .

%5.2f : 전체 수의 길이는 5 (소수점 포함), 소수점은 2자리까지 출력. ex) 32.44



'Yame Programmer > JAVA' 카테고리의 다른 글

[이론] 연산자 정리  (0) 2015.06.11
[이론] 문자열 입력  (0) 2015.06.11
[이론] 9.값과 연산자  (0) 2015.06.10
[이론] ASCII / UNICODE  (0) 2015.06.10
[이론] 함수 그리고 객체와 캡슐  (0) 2015.06.03

이클립스를 켜면 


An error has occurred. See error log for more details. java.lang.AbstractMethodError 


라는 에러 메세지가 계속해서 나오는 경우가 있다


확인해보니 자바버전의 문제 였다


전자정부 프레임워크의 버전이 2.7 버전일 경우 jdk 1.7 이하의 버전을 써야 한다고 한다.


이클립스의 windows - preferences - Java - Copiler 에 가면 컴파일러 레벨 이라고 되어 있는 콤보박스에서


현재 설치되어 있는 jdk의 버전을 설정 할 수가 있다.


여러 프로젝트를 하면서 jdk의 버전을 각각 변경해야 하는 경우가 있는데 컴파일러 버전을 바꾸어 주는 것이


빠르고 편리한 것 같다.

7. 함수 그리고 객체와 캡슐


함수 : 기능 (주체를 사용할 수 있는 행위)

컴퓨터 프로그램에서 식 내에 사용함으로써 하나의 값이 정해지는 절차. ex) y=Ax+B

함수는 동사(행위) - 동사는 명사가 없으면 어떤 행위를 할 수 없다.

비동기적인 시스템을 구성해야한다. * 비동기적이려면 버퍼를 사용해야함.

출력 버퍼(단 방향 버퍼 =OutputStream) ex) 일반통행 도로

Stream = 단 방향 버퍼.


출력버퍼 (outputstream)와 같이 한방향으로 가는 것은 단방향 버퍼라 한다.


동기적(Synchronous)

 어떤 작업을 요청했을 때 그 작업이 종료될 때까지 기다린 후 다음(다른) 작업을 수행하는 방식

 (한 가지 일을 순서대로 수행.)

비동기적(Asynchronous)

 어떤 작업을 요청했을 때 그 작업이 종료될 때까지 기다리지 않고 다른 작업을 하고 있다가,

 요청했던 작업이 종료되면 그에 대한 추가 작업을 수행하는 방식

(ex.전화)


버퍼(buffer, 문화어: 완충기억기)

 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼링(buffering)이란 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작을 말한다. 다른 말로 '큐(Queue)'라고도 표현한다.

보통 데이터는 키보드와 같은 입력 장치로부터 받거나 프린터와 같은 출력 장치로 내보낼 때 버퍼 안에 저장된다. 그러나 버퍼는 컴퓨터 안의 프로세스 사이에서 데이터를 이동시킬 때 사용된다. 이는 전자 통신의 버퍼와 비유할 수 있다. 버퍼는 하드웨어나 소프트웨어에 추가될 수 있지만 버퍼는 상당수가 소프트웨어에 추가된다. 버퍼는 보통 속도가 계속 바뀔 수 있으므로 데이터 수신, 처리 속도에 차이가 있다. (예: 프린터 스풀러)



객체 :

개체에 의미를 부여해 존재하는 것으로 만드는 것.

※ 객체(Object) : 실존 하는 것.  / 개체(entity) : 실존하지 않는 것.

자바는 new라는 키워드로 개체화한다.

ex)OutputStream ops = new OutPutStream(); 함수를 개체화 했다면 사용할 수 있다.

    함수를 사용하는 방법>

ops.write(문자); ->ops버퍼에 쓰는 작업

ops.flush();->비우는 작업

System.in / System.out 은 기본으로 제공되는 입,출력 도구

new ConsoleOutputStream() ->out 개체화 되어있다.

new ConsoleInputStream() -> in 개체화 되어있다.

'Yame Programmer > JAVA' 카테고리의 다른 글

[이론] 9.값과 연산자  (0) 2015.06.10
[이론] ASCII / UNICODE  (0) 2015.06.10
[이론] WORA(자바 플랫폼)  (0) 2015.06.03
[이론] 프로그래밍의 종류  (0) 2015.06.03
[이론]자바 프로그래밍 이란?  (0) 2015.06.03

6. wora(자바 플랫폼)


자바의 탄생 - 그린 프로젝트

1990년대 양방향 TV가 만들어짐

(단말기에서 사용자 입력이 필요하며 컨트롤도 필요하게 되며 다양한 플랫폼을 필요하게 됨)

하나의 프로그램을 다양한 플랫폼에서 사용 가능하도록 하기 위해 자바가 탄생함.

(자바는 c++의 단점을 보완하며 탄생함) /James Gosling - 자바의 창시자




C++의 문제점

-> 간결하지 않은 C 언어의 복잡성의 어려움

(프로젝트는 규칙에 의해서 작성되어야 하고 간결하게 만들어야 한다.)

-> 메모리 자원 관리의 어려움

->Write once, Run Anywhere(WORA)*의 어려움 : 보안문제, 독립적인 플랫폼 문제

->협업의 어려움



*WORA(Write Once, Use Anywhere):

1) 한 번 작성된 코드는 모든 플랫폼에서 실행이 가능

2) C/C++ 등 기존 언어가 가진 플랫폼 종속성을 극복


자바 플랫폼(WORA)의 특징

계산은 CPU와 메모리가 필요->자바 역할

입/출력은 다양한 장치가 필요-> 콘솔  /  윈도우 / 파일 /네트워크 역할

너무 다양한 입/출력 장치들 때문에 *인터페이스를 통해 간접적으로 이용할 필요가 생김

*인터페이스 : 차단된 두 대상을 이어주는 도구 (두 개의 시스템 또는 구성 요소 사이의 상호 연결)

사물 간 또는 사물과 인간 간의 의사소통이 가능하도록 일시적 혹은 영속적인 접근을 목적으로 미리 약속(규칙,표준)되어 만들어진 물리적, 가상적 매개체를 의미한다.


JAVA란?

자바는 수학을 닮은 함수를 통해 인터페이스 제공

(*수학을 닮은 함수를 사용하여 좋은점)

자바는 함수와 Drive를 통해 프로그램을 작성

(자바가 제공하는 함수를 API라고 부른다.(API는 인터페이스 역할))

자바는 다양한 운영체제에서 하나의 프로그램으로 구동 하도록 구현.

자바는 다양한 입출력 기계들을 하나의 함수로 사용하여 이용


*함수를 사용 했을 때의 장점

1. 구현을 숨기지만 구현을 사용할 수 있는 약속을 제공.

   (같은 코드를 계속 쓰지 않음으로서 프로그램의 용량을 줄일 수 있고, 다른 부분이나 다른

  프로그램에서 같은 코드를 사용할 수 있다. (인터페이스의 역할))

2. 하나의 큰 프로그램을 여러 부분으로 분리함으로써 구조적 프로그래밍이 가능하다.

3. 함수의 기능과 내부 구현을 분리하는 캡슐화가 이루어진다.









논리 플랫폼과 API

자바 플제 1 장 자바 개요랫폼 - 다양한 OS에서 사용


※ 자바 플랫폼이 있지 않으면 사용 할 수 없다.

구동프로그램(드라이버)

Application 함Program Interface (API) : 프로그램 또는 애플리케이션이 운영 체제에 어떤 처리를 위해서 호출할 수 있는 서브루틴 또는 함수의 집합이다.

콘솔 : 사용자가 이용 할 수 있는 접근 수단

** 모든 함수가 API는 아니다.

자바 소송 후폭풍…'


내장 입/출력 객체와 멤버함수

: 관련 있는 함수들의 모임


ex)   System.out.print(30);->시스템의 출력을 담당

     System.in.read();->시스템의 입력을 담당



'Yame Programmer > JAVA' 카테고리의 다른 글

[이론] 9.값과 연산자  (0) 2015.06.10
[이론] ASCII / UNICODE  (0) 2015.06.10
[이론] 함수 그리고 객체와 캡슐  (0) 2015.06.03
[이론] 프로그래밍의 종류  (0) 2015.06.03
[이론]자바 프로그래밍 이란?  (0) 2015.06.03

1. 자바  프로그래밍이란?


자바 프로그래밍이란 자바를 이용해 컴퓨터 프로그램을 만드는 작업이다


자바 : 컴퓨터 프로그래밍 언어

프로그램 : 지시 사항들이 나열된 순서, 어떠한 목적을 이루기 위한 수행 절차

프로그래밍: 프로그램을 만드는 것

컴퓨터 프로그래밍 : 특정한 프로그래밍 언어를 이용해 구체적인(목적을 가진) 컴퓨터

        프로그램으로 구현하는 기술


즉 자바 프로그래밍이란 “자바라는 컴퓨터 언어를 이용해 어떠한 목적을 이루기 위한 컴퓨터 프로그램(절차)을 만드는 것”이라 할 수 있다.



2. 컴퓨터와 CPU


1) 컴퓨터(computer)

수식 이나 논리적 언어로 표현된 계산을 수행하거나 작업을 통제하는 기계. 즉 계산기


2)CPU(central processing unit: 중앙 처리 장치)

소프트웨어 명령의 실행이 이루어지는 컴퓨터의 부분, 혹은 그 기능을 내장한 을 말한다.  CPU는 ALU(Arithmetic And Logic Unit) + Registers + CU(Control Unit)으로 구성되어있다.



ALU = 산술 연산

CU = 제어(반복) (ALU와 레지스터를 실질적으로 용도에 맞게 사용하는 컨트롤 장치.)

register = ALU에 값을 연산하기 전에 잠시 저장해 놓는 임시 메모리






3. 플랫폼(platform)

플랫폼이란 개발 환경, 어플리케이션 소프트웨어를 작동시킬때 기반이 되는 OS의 종류나 환경, 설정을 말한다. (기반/재료,환경)

+@ 예를 들면, MS-DOS상에서 동작하는 DOS가 플랫폼이며, MS-Windows상에서 동작하는 응용 소프트웨어에 있어서는 MS-Windows가 플랫폼이다. 또 어떤 소프트웨어가 제공하는 환경을 플랫폼이라고 하는 경우도 있다. MS-Windows가 제공하는 환경이 MS-Windows의 플랫폼이다)




4. 코드


1) 코드와 코드화

기록, 의사전달을 위한 기호화 / 뜻 의미가 부여된 기호는 코드가 된다. 또한 기록이나 의사전달을 위해 기호화 하는것을 코드화 라고 한다.


2)코드의 종류

고급(high level) 언어와 저급(low level)언어로 나뉠 수 있다. 고급 언어는 저급언어보다 사용하기 쉽고, 더 추상적이며, 더 이식 가능성이 높게 디자인된다. 어떤 언어의 경우에는, 문법적으로 올바른 프로그램들은 저급 언어로 컴파일(compile)되어 컴퓨터 상에서 실행(execute)되게 된다. 오늘날 대부분의 소프트웨어는 고급 언어로 작성된다. 그 후 오브젝트 코드로 컴파일되고 난 뒤 기계어로 변환된다.


a. 저급언어


기계어:CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어를 통틀어  일컫는다. 기계어는 프로그램을 나타내는 가장 낮은 단계의 개념이다.

기계어는 어셈블리어와 1 : 1로 쓰일 수 있다.




어셈블리어: (영어: Assembly language)는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍저급 언어이다. 컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 따라서 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다.




b. 고급언어

 고급 프로그래밍 언어란 사람이 알기쉽도록 씌어진 프로그래밍 언어로서, 저급 프로그래밍 언어보다 가독성이 높고 다루기 간단하다는 장점이 있다. 컴파일러 인터프리터에 의해 저급 프로그래밍 언어로 번역되어 실행된다. C 언어, 자바, 베이직 등 대부분의 프로그래밍 언어들은 고급언어에 속한다.


c. 컴파일

프로그래밍 언어로 작성된 프로그램을 컴퓨터가 이해할 수 있도록 기계어로 번역해 주는 역할을 하는 번역기



물리 코드, 논리 코드    < - 보충 설명 필요


물리(장치)에 종속된 코드가 물리코드.


물리장치에 종속되지 않은 코드가 논리 코드



인터프리터(interpreter, 문화어: 해석기)는 프로그래밍 언어소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 원시 코드를 기계어로 번역하는 컴파일러와 대비된다. 인터프리터는 다음의 과정 가운데 적어도 한 가지 기능을 가진 프로그램이다.



치수횽아

(실행코드=숫자코드=이진코드)

수학 코드

kor = 60

eng = 70

math = 80

total = kor+eng+math

avg = total/3



패턴화된 모듈들 함수.


플랫폼을 함수화 한 것 = API


모듈화 - 재사용  , 집중화, 협업


모듈화의 기본 - 차단!

'Yame Programmer > JAVA' 카테고리의 다른 글

[이론] 9.값과 연산자  (0) 2015.06.10
[이론] ASCII / UNICODE  (0) 2015.06.10
[이론] 함수 그리고 객체와 캡슐  (0) 2015.06.03
[이론] WORA(자바 플랫폼)  (0) 2015.06.03
[이론] 프로그래밍의 종류  (0) 2015.06.03

+ Recent posts