그림으로 배우는 자바,
파트2: 객체지향!
객체지향 프로그래밍
참고 사이트:
객체지향 프로그래밍?
객체 지향 프로그래밍:
조립식 프로그래밍.
프로그램을 부분별로 미리 만들어 놓고
조립해서 전체를 완성시키는 방법,
각 부품들은 객체이다
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가 만들어지면 객체를 만들 수 있으니까
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 타입의 변수 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) 클래스 전체 영역에 걸쳐서 활동
'> 프로그래밍 언어 > JAVA' 카테고리의 다른 글
[그림으로 배우는 자바, part2]: 03 레퍼런스와 스태틱 (0) | 2023.02.27 |
---|---|
[그림으로 배우는 자바, part2]: 02 생성자 (0) | 2023.02.27 |
[그림으로 배우는 자바, part1]: 08 배열 (0) | 2023.02.26 |
[그림으로 배우는 자바, part1]: 07 반복 (0) | 2023.02.20 |
[그림으로 배우는 자바, part1]: 06 조건문 (0) | 2023.02.19 |