객체(object)

: 데이터 자료들의 묶음. 순서는 없고 각 데이터마다 이름을 정할 수 있다.

 

- 데이터 ( value) , 이름 ( key ) 

- key는 마음대로 지을 수 있다. 변수명과 비슷

- 중괄호로 묶는다.

 

 

 

 

 

 

1. 객체 만들기

 

- 중괄호로 묶고, 데이터 마다 이름을 붙여준다.

 

 

 

 

 

 

 

2. 객체 안의 데이터 가져오기

객체명.key

. : 객체의 key값을 꺼낼 때 사용

 

 

 

 

* 아직 정의되지 않은 데이터

 

 

 

 

 

3. 객체안에 데이터 추가하기

 

 

* 순서가 없기 때문에 배열과 다르게 중간이 채워지지 않는다.

* 맨앞, 맨 뒤의 개념이 없기 때문에 push, pop, shift ... 기능이 없음

 

 

 

 

 

* 객체의 장점 : 데이터를 설명할 수 있는 key 사용. 정보를 다룰 때 많이 사용한다 *

 

 

 

 

 

 

4. 배열로 사용했을 때와 객체로 사용했을 때

 

 

 

 

 

 

 

 

5. 배열안에 객체 이용하기

 

 

ex) 출석부 - 학생 , 게시판 - 게시물 , 회원목록 - 회원

 

JASON과 연관이 있다

JASON : 배열과 객체를 이용하여 자료형태를 만든다.

 

 

 

 

 

 

5. 데이터를 받고 꺼내기

 

( 학생이름 꺼내기)

 

백엔드가 데이터를 JASON 형식으로 프론트엔드에게 보내면

프론트 엔드가 아래의 코드처럼 화면에 띄워준다.

( 백에늗와 프론트엔드의 통신 프로그램 : ajax 등 )

* 웹개발의 기본

 

 

 

1) 데이터

 

check_list라는 객체 안에 count와 student라는 배열

student라는 배열 안에 객체들

 

 

 

2) 데이터 꺼내기

 

-

 

 

 

 

- for 문 이용하여 꺼내기.

 

 

* .length 와 div형태로 나타내기

 

 

 

- ul에 li 추가하여 만들기

 

createElement : 태그(node) 만들기

createTextnode : text node 만들기

appendChild : 만든 node에 text node 붙이기 

 

 

'프론트엔드 > JavaScript' 카테고리의 다른 글

<JS> function 예제  (0) 2017.08.05
<JS> 함수 (function) (~es5)  (0) 2017.08.05
<JavaScript> 배열과 객체(1) 배열(array)  (0) 2017.08.04
<JS> 반복문 ( while & do.. while )  (0) 2017.08.04
<JavaScript> 반복문 for  (0) 2017.08.01

<1> 클래스의 정의와 인스턴스 생성 : 완벽한 개체지향 언어 java

 

1. 객체지향 프로그래밍의 이해

1) 객체 (object) : 물건, 또는 대상

 

2) 객체지향 프로그래밍

example)

"나는 과일장수에게 두 개의 사과를 구매했다 ! " 에서

객체 : 나, 과일장수, 사과

액션 : 객체 '사과'의 구매, 객체 '사과'의 판매

-> 객체지향 프로그래밍에서는 객체(나, 과일장수)를 등장시킬 수 있을 뿐만 아니라 행위('나'라는 객체가 '과일장수'로부터 '사과'구매, '과일장수'가 '나'에게 '사과'판매) 도 그대로 표현할 수 있다.

 

- 객체지향 프로그래밍 : 현실에 존재하는 사물과 대상, 그리고 그에 따른 행동을 있는 그대로 실체화 시키는 형태의 프로그래밍

* 뒤의 내용부터 코드의 간결성을 위해 '사과'는 객체화 시키지 않는다.

 

 

 

2. 객체는 데이터와 기능으로 이루어진다.

1) 객체 과일장수 : "과일의 판매"

- 과일을 판다 행동(behavior)  

- 과일장수는 사과 20개, 오렌지 10개 보유 상태(state)

- 과일장수의 과일판매 수익은 50,000원 상태(state)

:

(1) 객체는 하나 이상의 상태 정보(데이터)와 하나 이상의 행동(기능)으로 구성

(2) 상태 정보는 변수를 통해서 표현(변수에 상태 정보를 저장할 수 있으므로), 행동은 메소드를 통해서 표현

 

2) 과일장수의 상태 정보 표현(변수) *사과만 판다고 가정

-보유하고 있는 사과의 수 -> int numOfApple;

-판매 수익 -> int myMoney;

 

3) 과일장수의 행위(과일판매) 표현 (메소드) *이 메소드 내에서 과일장수의 현재상태를 나타내는 위의 변수에 직접 접근 가능하다고 가정

 

int saleApple(int money) //사과 구매액이 메소드의 인자로 전달

{

int num=money/1000; //사과가 개당 1000원이라고 가정

numOfApple-=num; //사과의 수가 줄어들고

myMoney+=money; //판매 수익 발생

return num; //실제 발생한 사과의 수 반환

}

 

 ============↓ 이들을 묶어서 객체라는 것을 통해 실체화* ===================*

 

 

 

3. 클래스(class)라는 틀을 기반으로 객체 생성

: '나' 또는 '과일장수'로 객체를 생성하기 위해선 둘을 위한 틀을 만들어야 한다.

1) 틀 구성 방식

class FruitSeller

{

int numOfApple=20;

int myMoney=0;    //변수선언

 

public int SaleApple(int money)

{

int num = money/1000;

numOfApple-=num;

myMoney+=money;

return num;

}    //메소드 정의

}

 

2) 클래스 

-class FruitSeller : FruitSeller라는 이름의 틀 정의 , 틀 = 클래스(class)

 

3) 클래스의 구성 요소

-위 예제에서 2개의 변수, 하나의 메소드 : 클래스는 객체를 구성하는데 필요한 변수와 메소드로 구성

-메소드 내에서 동일한 클래스 안에 선언된 변수에 접근 가능

*static 키워드 삽입 x  (-> chpter10에서 배움)

 

 

 

---- "나는 과일자수에게 2000원을 주고 두 개의 사과를 구매했다" 시뮬레이션 하기 위해 필요한 클래스 정의-----**

;

4. '과일장수' 클래스 정의와 키워드 final 

- 과일장수 클래스에 추가 : "2,000원 벌었어, 남은 사과는 18개 이고 말이야!" 라고 말하는 행위

1) '과일장수' 클래스 정의 FruitSeller

 

class FruitSeller

{

final int APPLE_PRICE=1000;    //사과 가격

int numOfApple=20;

int myMoney=0;

 

public int saleApple(int money)

{

int num=money/APPLE_PRICE;

numOfApple-=num;

myMoney+=money;

return num;    //판매한 과일의 수 반환

}

public void showSaleResult()

{

System.out.println("남은 사과 : "+numOfApple);

System.out.println("판매 수익 : "+myMoney);

}

}

 

-showSaleResult 메소드 추가

-final int APPLE_PRICE=1000; 으로 사과 가격 추가

 

2) 키워드 final

- final 변수 : final 키워드 삽입 후 선언한 변수 (변수가 상수화 된것이기 때문에 final 상수라고도 한다)

- final 선언 : " 한번 값이 결정된 이 변수의 값은 변경이 불가능하다!" - 지역변수로 final이 선언되면 딱 한번 값의 초기화가 가능

- 선언과 동시에 초기화 아닌 선언만 하는 것 가능.

 

final int APPLE_PRICE;

 

-> 딱 한번 초기화 가능

 

APPLE_PRICE=1000;

 

 

5. '나(me)' 클래스 정의

1) 삽입할 변수 ('나'의 상태) : 돈, 물품  

-소유하고 있는 현금 -> int myMoney;

-소유하고 있는 사과의 수 -> int numOfApple;

 

2) 삽입할 메소드 ('나'의 행위) : 과일의 구매 -> buyApple의 메소드 정의

 

3) '나'의 클라스 정의 FruitBuyer

 

class FruitBuyer

{

int myMoney=5000;

int numOfApple=0;

 

public void buyApple(FruitSeller seller, int money)

{

numOfApple+=seller.saleApple(money);

myMoney-=money;

}

public void Result()

{

System.out.println("현재 잔액 : "+myMoney);

System.out.println("사과 개수 : "+numOfApple);

}

}

 

** 보라색으로 표시한 내용은 뒤에서 설명될 것이다

 

 

--------------------------------------------------------클래스 정의 끝--------------------------------------------------*

6. 클래스를 기반으로 객체 생성하기

" 위에서 정의한 클래스들은 '틀'에 불과하다. 따라서 접근도 호출도 불가능하다 "-> 정의한 클래스 실체화, 즉 객체화

 

↓ 자바에서 정의하고 있는 객체 생성방법

ClassName name = new ClassName();

 

FruitSeller클래스와 FruitBuyer클래스 객체 생성방식 :

FruitSeller seller = new FruitSeller();

FruitBuyer buyer = new FruitBuyer():

 

1) 대입 연산자의 오른편 new FruitSeller(); / new FruitBuyer();

(1) new : 객체생성 명령하는 명령어. "Fruit~ 객체를 생성하라! "

-> 메모리 공간에 객체 생성. 인스턴스화 (instantiation) , 생성된 객체-인스턴스(intstance)

(2) 클래스와 객체의 차이점 ( 메모리 관점 )

 -클래스에 존재하는 변수와 메소드는 메모리 공간에 할당된 형태로 존재 x, 접근도 호출도 불가능.(틀로서만 역할)

 -객체는 메모리 공간 할당, 접근과 호출 가능.

 

2) 대입 연산자의 왼편 FruitSeller seller = ... ; / FruitBuyer buyer = ...;

: int num; 과 같은 선언문과 같은 구조. 자료형(FruitSeller or FruitBuyer)가 왼편, 변수의 이름(seller or buyer) 오른편

- 클래스를 정의하는 것은 자바에서 제공하는 기본 자료형 이외에 프로그래머가 새로운 이름의 자료형을 정의하는 것

 

3) 객체 생성 문장 총 정리 분석

(1) FruitSeller seller = new FruitSeller();  : FruitSeller 객체를 생성하고 이를 seller라는 이름의 변수로 참초

(2) FruitBuyer buyer = new FruitBuyer():   :FruitBuyer 객체를 생성하고 이를 buyer라는 이름의 변수로 참조

 

-> 이 두 문장이 실행된 이후로는 각각의 개체에 seller, buyer를 통해서 접근 가능

-> seller & buyer : 참조변수

 

 

 

7. 객체 생성과 참조의 관계

: 키워드 new에 의한 객체 생성시 생성된 객체는 메모리에 저장되고, 저장된 메모리의 주소 값이 반환, 선언된 참조변수에 저장.

 

- 주소값이 저장되었기 때문에 다음의 문장 구성 가능

FruitSeller seller1=new FruitSeller();

FruitSeller seller2=seller1;

 

-> 두 개의 참조변수가 하나의 객체를 참조.

 

** new에 의해 반환되는 주소 값 : 자바에서는 new에 의해 반환되는 주소 값( 참조변수가 저장하고 있는 값 ) 을 '참조' , reference 라고 한다.

 

 

 

===============================객체로의 실체화 끝 =====================================*

8. 생성된 객체의 접근방법

" 연산자를 이용해서 객체의 변수 또는 메소드에 접근한다 " *접근이 가능하려면 접근권한이 있어야 한다. 다음 챕터에서 다룸

1) 참조변수 seller의 예

- seller가 참조하는 객체의 변수 numOfApple에 값 저장하기

seller.numOrApple=20;     //seller가 참조하는 객체의 변수 numOfApple에 20저장

- seller가 참초하는 객체의 메소드 호출

seller.saleApple(10);     //seller가 참조하는 객체의 메소드 saleApple 호출

 

 

 

9. 참조변수와 메소드의 관계

 

public void myMethod()

{

FruitSeller seller1 = new FruitSeller();

instMethod(seller1); //seller1 이 메소드의 매개변수로 전달됨!

}

public void instMethod(FruitSeller seller2) //매개변수 형이 FruitSeller이다.

{

...

}

 

instMethod라는 이름의 메소드 호출, 참조변수 seller1에 저장된 값 전달, instMethod는 seller2라는 이름으로 받음.

 

 

메소드를 호출하면서 참조변수를 전달하는 상황에서 생각할 수 있는 값의 전달 진행의 경우 

1) 참조변수가 메소드의 인자로 전달되면 동일한 형태의 객체가 생성되어(복사) 매개변수가 이를 별도로 참조.  -x

2) seller2에 seller1이 젖아하고 있는 객체의 참조 값(주소 값)이 전달되는 상황. - seller1과 seller2가 하나의 객체를 동시에 참조. -o

 

 

 

 

- 3~13 : Number라는 이름의 클래스 정의, (클래스 안에 존재하는 메소드와 변수의 위치 상관 x)

- 19 : 객체 생성. 참조변수는 nInst

- 20 : nInst가 참고하는 객체의 getNumber 메소드 호출. -> 객체 내에 존재하는 변수 num값 반환, 0

- 22 : 같은 클래스 내의 25행에 정의되어 있는 메소드를 호출하면서 인자로 nInst가 전달, 호출된 메소드 내에서 매개변수 numb로 이를 받고 있다. 그리고 27행에서는 매개변수 numb를 이용하여 addNum 메소드 호출, -> numb가 참조하는 객체에 저장된 변수 num 값이 12증가

- 23행 : 다시 nInst가 참조하는 객체의 getNumber 메소드 호출

 

: numb가 참조하고 있는 객체 내의 변수 num를 변경한 뒤 nInst가 참조하고 있는 객체의 변수num을 출력했더니 numb를 이용하여 변화하기 전과 다른 결과가 나왔다. 즉 참조변수 numb와 nInst는 같은 메소드를 참조하고 있음 -> 메소드로의 참조변수 전달은 객체의 주소값만 전달됨.

 

* 생성되는 class 파일의 수 : 확장자가 .class인 클래스 파일은 정의되는 클래스 수 만큼 생성

 

 

 

10. 참조변수의 null 초기화

: 참조변수 선언 시 특정 개체로 초기화가 이뤄지지 않는다면 null로 초기화 가능

 

MyInst my=null;     //MyInst라는 클래스의 참조변수 my 선언

 

참조변수 my가 객체를 참조하고 있는지 확인하기 위해 다음과 같은 if문도 구성 가능

 

if(my==null) System.out.println("참조변수 my는 현재 참조하고 있는 객체가 없습니다.")

 

+) null로 초기화된 참조변수를 System.out.println메소드로 출력하면 문자열 null이 출력된다.

 

 

 

11. 사과장수 시뮬레이션

-FruitBuyer의 saleApple 메소드 : 구매를 하는데 있어서 필요하지만 클래스 안에 존재하지 않는것 -구매대상(과일장수), 구매금액(2000)

-numOfApple+=seller.saleApple(money); : seller가 참조하는 saleApple가 호출, 반환되는 값의 크기만큼 numOfApple 증가

-buyer.saleApple(seller,2000); : seller가 참조하는 객체는 사과를 판매하고 수익이 생긴다. buyer가 참조하는 객체는 돈을 지불하고 사과를 얻는다. 그 아래에 결과 출력.

 

 

 

12. 객체간의 대화방법(Message Passing방법)

 

위 시뮬레이션의 numOfApple+=seller.saleApple(money); 는 현실세계에서 " seller아저씨, 사과 2000원 어치 주세요"

'나' 라는 객체가 '과일장수'라는 객체로 부터 '과일'객체를 구매하는 행위  )

 

하나의 객체가 다른 하나의 객체에게 메세지를 전달하는 방법은 메소드 호출을 기반으로 함.

->객체지향에서 메세지 전달(Message Passing)이라고 함

 

 

 

13. 객체와 인스턴스

자바에서 객체와 인스턴스는 동일한 의미로 사용. 하지만 표현에 따라 어울리는 상황이 있음.

1) 인스턴스 : 클래스라는 틀을 기바능로 실제화 되었음을 강조할때

" 클래스 FruitSeller의 인스턴스 두 개 생성한다."

2) 객체 : 현실세계의 사물이나 대상을 프로그램상에서 표현되었음을 강조할 때

"과일장수 하시는 옆집 철수 아버님을 의미하는 객체를 생성한다."

 

+) 클래스 안에서 정의되어서, 인스턴스가 생성되어야만 접근이 가능한 변수와 메소드를 가리켜 각각 '인스턴스 변수', '인스턴스 메소드'라고 한다

 

 

* 인스턴스 변수와 인스턴스 메소드 : 메소드라는 이름이 붙은 이유는 메소드가 인스턴스의 행위 및 행동을 표현하는 방법(method)으로 사용되기 때문. 자바에서는 인스턴스 변수를 가리켜 인스턴스 필드(instance field)라고 부르기도 한다.

 

 

 

 

출처 : 난 정말 JAVA를 공부한 적이 없다구요(윤성우 저)

+ Recent posts