본문 바로가기
> 프로그래밍 언어/JAVA

[그림으로 배우는 자바, part2]: 01 객체지향 프로그래밍

by 자몽주스 2023. 2. 26.
728x90

그림으로 배우는 자바,

파트2: 객체지향!

객체지향 프로그래밍

참고 사이트:

자바, 입문하기! | CloudStudying

객체지향 프로그래밍?

객체 지향 프로그래밍:

조립식 프로그래밍.

프로그램을 부분별로 미리 만들어 놓고

조립해서 전체를 완성시키는 방법,

 각 부품들은 객체이다

 

OOP를 쓰는 이유(3):

1) 관리가 편함

2) 객체를 재사용 할 수 있음

3) 프로그램 확장이 편함

(새로 추가하는게 편함)

객체는 CLASS 를 통해 만들 수 있음

 

CLASS: 객체를 만들기 위한 설계도

 

객체를 만들기 위해선

 각 객체별 설계도인

CLASS가 필요

 

인스턴스화:

CLASS를 통해 객체를 만들어나가는 과정

 

Object (객체)

인스턴스 라고 부르기도 함

<Class 만들기 (2)>

- fields: 

객체가 가지게 될 상태를 정의

 

- method:

객체가 할 수 있는 동작

- 고양이 클래스 -

우측 도표로 나타낸 class 를

class diagram 이라고 한다

- 클래스 코드로 구현하기 -

1. 클래스를 만든다

2. 필드를 작성한다

3. 메소드를 정의한다 

메소드에 public 또는 static이 없다는 점:

해당 개념 배울 때 다시 다뤄볼 예정

  클래스 설계 및 작성

클래스는

클래스 다이어그램을 통해서

설계 가능하다

 

class는 fields와 methods로

이뤄져있음

 

클래스 다이어그램,

즉 설계된 내용을 토대로

코드를 작성해보기

- Class 구현하기 -

클래스 Cat 이니까

내용중괄호 안 쪽에 담아둔다

안 쪽에 field 와 method 를 넣어주면 됨

 

field - 상태

method - 동작

고양이 객체가 할 수 있는 일들

- 예제 -

 class 만들기

class 구현

class가 만들어지면 객체를 만들 수 있으니까

main 메소드 안쪽의 내용을 보면

객체를 생성하는 코드가 있다

 

new Dog();

라는 코드가 객체를 생성하는 것이다

(1번으로 표시)

1번 코드실행하게 되면

Dog 라는 객체가 만들어지게 됨

 

Dog d 하고 대입연산자로 돼있는 건

2번 코드라고 지정한다고 치면,

2번 코드

만들어진 오른쪽 객체 1번에다가

d 라는 이름을 입히는 것

첫 번째 연두색 덩어리에선

객체를 생성하고 이름을 정한 거라면

 

두 번쨰 빨간색 덩어리

만들어진 객체의

이름과 품종과 나이를

출력하게끔 하는 코드이다

 

d.name

d.breeds

d,age

왜 앞에 d가 붙은걸까?

=>  2번 코드에서 d 라는 이름을

객체에 붙여줬기 때문에.

이름(변수명)을 타고 접근함

 

정해진 이름에다가

점을 찍으면

해당 객체에 접근이 되는 것

name 하고 breeds 가 null 이 나오고

age가 0이 나올 수 있었던 이유

= name 은 String 타입

 String 타입에

아무것도 대입이 안되면

기본값은 null 이다

int의 기본값은 null 이 아니라

0이다

 

값을 아무것도 정해주지 않았기 때문에

이와같은 결과가 나온 것

- 객체 생성과 필드 값 변경하기 - 

코드를 완성했다면 객체를 만들 수 있다

객체를 만 드는 방법(코드):

new 라는 키워드 + class 이름 + () + ;

 

이런식으로 객체를 만들 수도 있지만

아래와 같은 방법으로 객체를 주로 만든다

 

new Dog();

이것은 객체를 만들긴 하지만

객체를 다시 써야하므로

객체를 생성 후, 변수화 할 필요가 있다

 

객체를 만든 걸 대입하면 된다

dog 타입의 dog1(변수명) 에다가.

1) 객체를 만드는 코드

 

2) 객체를 사용하기위해 이름을 붙임

dog 타입의 dog1이라는 변수명을 붙여주면

나중에 dog 객체에 접근할 때

dog1 이라는 변수를 통해서

해당 객체(dog)로 접근할 수 있게 됨

 

점수 86점을 다시 사용하기 위해서

int 타입의 변수 score에 저장하는것과

마찬가지의 원리이다

변수 dog1에다가 닷(.)을 찍어줌으로서

dog 객체에 접근할 수 있게되는데,

 

객체의 이름에다가 "멍무이"라는

값을 대입하는 것이다.

Dog에 name이 있는데,

아무것도 지정이 되지 않은 .name에다

"멍무이"라는 이름을 넣어주게 되는 것

 

weight도 마찬가지로 넣어 줌

 

이런식으로 객체의 필드를 갖고 오거나 바꿀 수 있는 것

객체의 필드 출력

 

1번 ) 메인메소드 담겨있는 CatTest 클래스


2번 ) Cat 클래스

=> 고양이 객체를 만들기 위한 클래스

 

1번의 메인메소드를 보면 객체(Cat)를 생성하고 있음

Cat c = new Cat();

 =  new Cat();; 이라는 코드를 통해서

Cat 이라는 클래스의 객체를 생성하고

cat 이라는 클래스

이름을 Cat 타입의 변수 C 라고 붙이고 있다

name, breeds, age에다가

각각의 값을 넣어주려면

 

객체의 이름을 재사용해서

c에다가 (.) 닷 연산자를 찍고

(=해당 객체에 접근)

값을 넣어주면된다

그리고 필드를 출력하면

대입된 값이 나온다

객체 생성과 메소드 호출

하나의 클래스

여러 객체를 만들 수 있음

(붕어빵틀 원리)

- bicycle 클래스 하나로 2개의 객체 찍어내는 예시 - 

new Bicycle(); 을 통해서

bicycle 객체를 만들고,

b1이라는 이름을 붙임

b2도 마찬가지

 

bicycle 객체 b1을 생성하고있고,

b1에 대한 필드값을 초기화한 상태

1번 ) BicycleTest라는 메인 클래스

전체 프로그램의 흐름 작성

 

2번) 1번 가운데에 사용되는 Bicycle클래스가

2번 클래스이다

2번 Bicycle 클래스

필드와 메소드로 이뤄져 있음

이를 갖고 해당 bicycle 객체를 만들고,

그 객체에 대한 값을 초기화해서

출력한다

 

b2를 만들어주고 출력하려면

1) b2를 객체를 생성하고,

2) 해당 객체의 필드를 초기화 시켜준다

null 값과 0이 들어있던 값에

값이 들어가게 된다

3) 출력

 

요약: 하나의 클래스로

여러 객체를 생성할 수 있음

- 인스턴스 메소드 호출 -

 객체에 특정 동작 실행시키기

 인스턴스 = 객체

 

어떤 객체에게 특정 동작을 수행시키는 것:

인스턴스 메소드를 호출하는 것

 

1) 먼저 객체를 생성한다

new Cat();

 

2) cat1이라는 이름으로 연결시킴

 

3) cat1에 연결된 객체에게

meow 라는 메소드를 호출시킨다

 클래스를 통해서 만들어진 객체:

인스턴스

 

 인스턴스가 어떤 동작을 하게 만드는 것:

인스턴스 메소드 호출

스코프, 변수의 활동영역

 

- 클래스 스코프 -

필드의 활동 영역: 클래스 전체

 

 

Dog 클래스

name과 age라는 필드를 갖고있고,

bark 라는

메소드를 갖고있다 - 짖는 메소드

  

name 에 "멍멍"이라는 말을 출력하기.

그러나,bark 메소드에는

name이라는 변수가 없다.

name필드에서 갖고 온 변수로,

필드의 활동영역class 전 영역라서

class 안 쪽 어디에서든 갖다 쓸 수 있다

 

스코프: 변수 활동 영역

 

필드의 활동 영역 = 클래스 스코프

: 클래스 전역에서 활동한다는 뜻

 

- claw() 메소드를 수정하기 예제 -

1) CatTest3 클래스

전체적인 시나리오 짜는 클래스

 

  2) Cat 클래스

필드와 메소드

cat 객체를 만들고

cat1하고 cat 2에

각각 2개의 객체가 연결되고 있다

 

cat1, cat2 에게 이름 넣어주고

 

네로와 나비의

meow 메소드를 넣어준다

 

마지막 영역은 할퀴기 메소드

 

이름이 같이 나올 수 있게

출력해준다

 

필드클래스 전체에서 활동영역을 갖으니

claw 메소드 안에서 name을 갖다 쓸 수 있다

- 메소드 스코프 -

파라미터지역변수의 경우

메소드 스코프를 갖는다

= 메소드 내부에서만 활동할 수 있는 것

pushButton 메소드의 예시;

파리미터 num

-> 이 변수는 해당 메소드

내부에서만 활동할 수 있다

 

이를 "메소드 스코프" 라고 함

 

마찬가지로 파라미터 뿐만아니라

지역변수 drinks도 

메소드 내부에서만 활동할 수 있음

 

(지역변수: 메소드 내부 선언 변수) 

필드는 (output) 클래스 전체 영역에 걸쳐서 활동

  

728x90