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

* 재사용 - 컴파일된 바이너리를 다시 사용 // 소스 코드가 없는 상황에서 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

9. 값과 연산자

자바에서의 값의 종류 : 정수값 실수값 문자값 진리값

정수값(4바이트)

                

              ->int

실수값

           ->double/float

문자값


      ->char

진리값


     ->boolean

26(10)  -> 0x1a(16)

26(10)  -> 032(8)

26(10)  -> 0b11010(2)

26L ->8바이트


123.4(8바이트/double형)  -> 123.4f(4바이트/float형)

1.234e2d(소수점뒤로 두개 옮김)

'A'

true/false



산술 연산

나머지 연산

자료형 (형변환) : avg = tot / 3.0f; 묵시적인 형변환

                       avg = (float)(tot / 3.0); 강제형변환 (안하면 에러)


묵시적 형변환은 바꾸겟다고 형번환 선언은 하지 않았지만 컴퓨터가 알아서 이 계산값을 어느 형태의 자료에 담으려고

자동적으로 형태를 변환해 주는 것을 말한다.


강제 형변환은 avg = (float)(tot / 3.0); 에서 float 라고 써준것 처럼 강제로 이 앞에 값은 float형식이다! 라고 선언해 주는 것을 말한다.


정수 [연산] 정수 -> 정수값 출력

정수 [연산] 실수 -> 정수를 실수로 변환후 계산 -> 실수값 출력 [기본적으로 무손실 변환을 하려고 한다]

손실변환을 하려면 명시적으로 적어주어야 한다. ex) a=(float)(total/3.0);

http://blog.eairship.kr/91 - 연산자 참고 페이지

http://blog.eairship.kr/92 - 비트 연산자 참고 페이지



왜 비트연산을 써야 하는가. - 메모리 줄이려고


과거엔 메모리 용량과 속도 때문에 비트 연산을 사용했다. 요즘도 쓰긴 하지만 많이 쓰진 않는것 같다.

8. ASCII / UNICODE

식별 되는 문자코드가 있어야 범용으로 데이터 통신을 할 수 있기 때문에 만들어진 코드 체계. 8bit로 표현

ex)입력 값 ‘2’->실제 입력값 ‘50’(key code)

ASCII 코드 -> 각국 문자 코드 확장 -> 번호(문자코드)가 겹치지 않게 하는 UNICODE 탄생

ex)ASCII 코드 한국:euc-kr   /  UNICODE 한국: utf-8

System.out.wirte(3); ->50    =3의 아스키 코드값인 50출력

System.outwrite('3'); ->3    =문자로 인식하여 3출력


무슨말인가 하면 우리들이 사용하는 문자를 컴퓨터는 바로 알아먹을 수가 없기 때문에 그것들을 코드화 했다는 말이다.

위의 예제와 같이 문자열로 입력하지 않은 3은 아스키 코드값인 50이 출력이 된다.

그렇다면 이런것들을 왜 알아야 하느냐? 

단축키를 설정하거나 혹은 문자열을 사용할수 없는 경우에 사용할 때가 있다.

혹은 컴퓨터가 유니코드로 값을 뱉는 경우에 저 표를 보고 어떤 문자인지 파악을 할때도 있다.

물론 자주 있는 경우는 아니지만 이걸 아느냐 모르느냐로 코딩에 있어서 크리티컬한 타격이 올때가 있으니

저걸 외우는건 외울필요도 없고 자주 쓰지도 않으니 저런게 있다는것만 알아두고 검색해서 그때그때 사용하자.


핸드폰과 PC의 연동 도중 lg android mtp device driver가 설치되지 않아 연결되지 않는 경우가 있다


http://local.sec.samsung.com/comLocal/support/down/kies_main.do?kind=usb


위 링크로 가서 USB 통합 드라이버를 설치 하자


삼성에서 다운로드 받지만 통합 드라이버일뿐 LG의 핸드폰도 적용이 되기 때문이다.



에러가 발생 했을때 에러 메세지가 그대로 노출 되는 팝업창의


문구를 변경하고 싶어서 한참 해매다 결국 엠로의 기술지원센터에 문의해서 답변을 받았다.




src/flex/preloads/environments.mxml  파일의 remote 펑션에서


if (!event.isDefaultPrevented()) {

SCAlert.show(em.faultDetail, em.faultString, false, 4, null, function():void {

if(em.faultCode == "1") {

var request:URLRequest = new URLRequest("/");

request.method = URLRequestMethod.POST;

navigateToURL(request, "_self");

}

});

}


이 부분을





if (!event.isDefaultPrevented()) {

/* 서버 연결시 팝업 메세지 변경으로 인한 주석처리

SCAlert.show(em.faultDetail, em.faultString, false, 4, null, function():void {

if(em.faultCode == "1") {

var request:URLRequest = new URLRequest("/");

request.method = URLRequestMethod.POST;

navigateToURL(request, "_self");

}

});

*/ 

// 문구 변경을 위한 추가 

if(em.faultCode == "1"){ //세션타임아웃 

var request:URLRequest = new URLRequest("/"); request.method =                                                 URLRequestMethod.POST; navigateToURL(request, "_self"); }

else{

SCAlert.show("원하는 문구를 이곳에 넣으면 됩니다.","팝업창 제목"); }


}




이렇게 변경 하고 scalert 에 원하는 문구를 넣으면 된다.



이클립스를 켜면 


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


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


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


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


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


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


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


빠르고 편리한 것 같다.

+ Recent posts