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

[그림으로 배우는 자바, part2]: 02 생성자

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

그림으로 배우는 자바,

파트2: 객체지향!

생성자

참고 사이트:

자바, 입문하기! | CloudStudying

생성자?

지난번 복습1
지난번 복습2

생성자:

클래스로부터 객체를 만드는

특별한 메소드

 

클래스를 통해 객체를 만들기 위해선

생성자를 호출해야 한다

파란 표시가 바로 생성자

생성자 또한 특별한 메소드이다

생성자를 호출할 때

소괄호가 열리고 닫히는 형태

객체를 만드는 기능을 하는 것 뿐만아니라

초기화의 역할도 한다

보통 객체를 생성하면

일반적으로 필드를 초기화한다

그런데 생성자를 잘 활용하면

4줄짜리를 단 한 줄로

줄일 수 있다

- 생성자 사용법 - 

생성자 또한 메소드라서

호출과 정의를 알아야 한다

 

호출 시, 앞 쪽에

new 라는 키워드를 추가하고

정의할 때리턴타입이 없음

1) 먼저 객체를 생성하고

 

2) 입력값들로 필드 (이름,무게,나이) 를

각각 초기화한다

생성자로 객체 값 넣기

- 생성자 호출과 초기화 -

1) new Bicycle 로 생성자를 호출하고 있음

 

2) b 라는 변수에 대입

3) 1번코드가 수행이 되면

오른쪽에 있는 노란 객체가

컴퓨터 메모리에 만들어진다

(객체가 생성과 동시에

값들이 초기화 됨)

이걸 변수 b에다가 대입하게 되면

변수 b가 앞서 만들어진 객체 1번에

연결되는 것이 2번 코드의 수행이다

 - 예제 -

또 하나의 객체를 추가하여

아래와 같은 결과 얻기

2개의 Class 로 만들어져 있다

1) BicycleTest Class:

전체 클래스의 시나리오를 작성함

 

2) Bicycle Class:

실제 객체를 만들기 위한 설계도

-  Bicycle Class -

필드와 메소드로 구성되는데

필드엔 name, weight, price와

메소드로는 생성자로 구성

- BicycleTest - 

BicycleTest를 갖고 프로그램이 동작하게 됨

즉, 시나리오대로 흘러가는 것

 

객체를 만들고

new Bicycle();

 

만들어진 객체를 출력하는 코드의 형태

이 값을 가진 객체가 만들어지고,

b1에 연결시킨 상태

컴퓨터 상에 이런식으로

객체가 만들어진다

b1.name

-> b1의 name을 %s 에다가

그리고 나머지들도 연결해서

출력해준다

b2 도 출력하려면 객체 만들어주면 된다

< String.format() 메소드 >

: 형식 문자열을 만들어주는 메소드

"Goroke { %s, %d원 }"

이런 문자열을 형식문자열 이라고 한다

여기다가 name 하고 price 를 삽입해서

하나의 문자열을 만들어 주는 것

 

printf 메소드와 흡사함

 

차이점: 

printf - 형식문자열을 console창에 출력

String.format() 메소드출력하지 않음.

단지 형식문자열을 만들어주는 것일 뿐.

생성자 정의 및 디폴트 생성자

< 생성자 정의하기 >

생성자가 잘 호출되려면

먼저, 정의된 생성자가 있어야 한다

~ 생성자가 어떻게 객체를 만들고,

초기화하는지에 대한 내용을

알아보기 ~

 

1번 ) 생성자 호출하는 코드 만들어주기

콜라를 만들기 위한 생성자 호출코드

1번 코드가 호출이 되면

전달값들이

생성자의 파라미터로 넣어진다

 

(메소드 호출과 동일한 방식)

생성자 또한 특별한 메소드이니까

같은원리로 동작하는 것

 

던져진 전달값들은

각각의 파라미터 n 과 p 로 저장이 됨

 

n 은 필드인 name

p 또한 필드인 price로

대입을 하기때문에

객체의 필드값인 name 이 "코크" 가 되고

price 가 "2000"이 된다

 

그리고

그 결과가 c1이라는 변수에

연결이 되는 것이기 때문에

 

생성자 호출된 코드

new Cola("코크", 2000)가

 

정의된 생성자

Cola(String n, int p ){

name = n;

price = p;

} 를 통해서

객체를 만들고 초기화 한다는 것이다

- 사라진 디폴트 생성자 - 

클래스를 갖고

생성자 호출을 통해서

객체를 생성

 

생성자가 없는 클래스의 경우,

객체를 만들 수 있을까?

= 디폴트 생성자를 호출하면 가능하다

디폴트 생성자:

파라미터가 비어있고,

Hero()

중괄호 내부도 비어있는 생성자이다

 

클래스의 생성자가 없는 경우에,

자동으로 기입이 된다

 

정리

객체 배열, 객체와 파라미터

< 객체 배열 >

ex) book 객체

객체를 중괄호에 담아서

comics 라는 변수

객체의 배열을 연결시킨 상태

 

comics의 타입 = Book의 배열 타입

따라서, 객체를 3개 만들고

배열을 만들어서 변수에 연결시키면

이렇게 컴퓨터가 동작한다

 

이러한 구조로 객체배열이 생성됨

< 파라미터로 객체 전달 >

객체 또한 메소드의 파라미터로 전달 가능

Hero 클래스 안

punch 메소드가 있는데,

 

punch 메소드의 파라미터가

Hero 타입의 enemy로 정의돼있음

= 전달값으로 Hero 객체를 받을 수 있다는 뜻

아이언맨과 캡틴아메리카

라는 이름을 가진

Hero 객체를 만들고

 

아이언맨 객체가 주체가 돼서

punch 메소드를 수행할 때,

입력값으로 captain 객체(캡틴아메리카)를

던지고 있음

 

캡틴 아메리카도 마찬가지.

 

enemy에 들어가는 객체

아이언맨이 주체일 땐,

캡틴아메리카가

enemy가 되고

캡틴이 주체일 땐, 그 반대가 된다

결론: 객체 또한 파라미터로

전달될 수 있다는 뜻

요약

객체를 생성과 동시에

초기화 하려면

적절한 생성자가 있어야 함

객체 또한 배열로 만들 수 있음

객체를 파라미터로

전달할 수 있음

728x90