자바, 객체지향!

자바, 객체지향!

자바 프로그래밍의 꽃, 조립식 프로그래밍!

22 객체의 생성과 사용

# 객체의 생성과 사용 <div class="embed-responsive embed-responsive-16by9"> <iframe src="https://www.youtube.com/embed/RkvkJZVJ0bs" frameborder="0" allowfullscreen></iframe> </div> --- ## 객체의 필요성 우리는 앞서 자바의 특징으로 객체지향프로그래밍 언어라는 점을 배웠습니다. 객체지향프로그래밍이라 함은 객체들의 조합으로 전체 프로그램을 만드는 기법입니다. 따라서 자바로 프로그램을 작성하기 위해서는 객체들을 먼저 만들어야 만 합니다. 그래야지 만들어진 객체들을 조합하여 전체 프로그램을 만들 수 있기 때문입니다. ![Imgur](https://i.imgur.com/bTrvx7X.png) --- ## 객체를 만드는 도구 그렇다면 객체는 어떻게 만든다고 하였습니까? 바로 클래스를 토대로 만든다고 배웠습니다. 우리가 건물을 짓는다고 가정해 봅시다. 건물을 짓기 위해 먼저 설계도를 만들것이고 이를 토대로 건물을 지을 것입니다. 이 처럼 자바에서도 객체를 만들기 위해 먼저 설계도가 되는 클래스를 작성합니다. 이렇게 작성된 클래스를 토대로 우리는 객체를 만들 수 있습니다. 객체란 클래스를 토대로 만들어진 컴퓨터 메모리상에 무언가를 말합니다. ![Imgur](https://i.imgur.com/sO0A0kv.png) ## 객체(인스턴스)의 생성 **객체**(또는 **인스턴스**: 클래스의 실제 구현물)는 아래와 같은 형식으로 생성합니다. ```java public static void main(String[] args) { // CLASS 타입의 reference 변수에, 새롭게 만든 CLASS 객체를 대입! CLASS reference = new CLASS(); } ``` 실제 예를 들어 객체를 생성해봅시다. 아래 제시된 Hero 클래스의 객체를 생성하려면 어떻게 할까요? ```java public class Hero { // 필드: 정보 or 상태 String name; int hp; // 메소드: 동작 or 기능 void punch() { System.out.println(name + "의 펀치!"); } } ``` 정답은 아래와 같습니다. ```java public class Hero { // 필드: 정보 or 상태 String name; int hp; // 메소드: 동작 or 기능 void punch() { System.out.println(name + "의 펀치!"); } public static void main(String[] args) { // 객체를 생성! Hero h1 = new Hero(); } } ``` --- ## 객체 값 출력하기 그럼 본격적으로 객체(또는 **인스턴스**: 클래스의 실제 구현물)를 사용해봅시다. 객체를 가리키는 변수에 닷연산자(`.`)를 사용하면 해당 객체의 필드와 메소드에 접근할 수 있습니다. ```java // 객체 생성 Hero h = new Hero(); // 객체의 필드값 접근 h.name; h.hp; // 객체의 메소드 수행 h.punch(); ``` 그렇다면, 앞에서 만든 Hero 객체의 정보(필드 값)를 출력해봅시다. ```java public class Hero { // 필드: 정보 or 상태 String name; int hp; // 메소드: 동작 or 기능 void punch() { System.out.println(name + "의 펀치!"); } public static void main(String[] args) { // 객체를 생성! // 새롭게(new) Hero 객체를 생성하여, // Hero 타입의 변수 h1에 연결! Hero h1 = new Hero(); // 객체의 정보(필드값)를 출력! System.out.println(h1.name); System.out.println(h1.hp); } } ``` 위 코드의 수행 결과는 아래와 같습니다. ``` null 0 ``` `h1.name` 값은 `null`로서, 아무 값도 없음을 의미합니다. `h1.hp`값 또한 0으로 출력 되고 있습니다. ## 객체 값 대입하기 자, 계속해서 위에서 만든 객체에 우리가 원하는 값을 대입해 보도록 하겠습니다. ```java public class Hero { // 필드: 정보 or 상태 String name; int hp; // 메소드: 동작 or 기능 void punch() { System.out.println("펀치!"); } public static void main(String[] args) { // 객체를 생성! // 새롭게(new) Hero 객체를 생성하여, // Hero 타입의 변수 h1에 연결! Hero h1 = new Hero(); // 객체의 정보를 대입! h1.name = "쥬리오"; h1.hp = 100; // 객체의 정보(필드값)를 출력! System.out.println(h1.name); System.out.println(h1.hp); } } ``` 위 코드의 수행결과는 아래와 같습니다. ``` 쥬리오 100 ``` ## 서로 다른 두 객체 만들기 이번에는 하나의 클래스에서 서로 다른 두 객체를 만들어 봅시다. ```java public class Hero { // 필드: 정보 or 상태 String name; int hp; // 메소드: 동작 or 기능 void punch() { System.out.println("펀치!"); } public static void main(String[] args) { // 객체를 생성! // 새롭게(new) Hero 객체를 각각 생성하여, // Hero 타입의 변수 h1, h2 에 연결! Hero h1 = new Hero(); Hero h2 = new Hero(); // 객체의 정보를 대입! h1.name = "쥬리오"; h1.hp = 100; h2.name = "간달프"; h2.hp = 80; // 객체의 정보(필드값)를 출력! System.out.println(h1.name); System.out.println(h1.hp); System.out.println(h2.name); System.out.println(h2.hp); } } ``` 위 코드의 수행결과는 아래와 같습니다. ``` 쥬리오 100 간달프 80 ``` --- ## 객체 메소드 수행하기 계속해서 위에서 만든 h1, h2 객체에게 펀치 메소드를 수행 시켜 봅시다. ```java public class Hero { // 필드: String name; int hp; // 메소드: void punch() { System.out.println(name + "의 펀치!"); } public static void main(String[] args) { // 객체를 생성! // new Hero(): 새롭게 Hero객체를 생성합니다. // Hero h1 = : 위에서 생성된 Hero객체를 Hero 타입의 변수 h1에 연결! // Hero h2 = : 위에서 생성된 Hero객체를 Hero 타입의 변수 h1에 연결! Hero h1 = new Hero(); Hero h2 = new Hero(); // 객체의 값을 변경! h1.name = "쥬리오"; h1.hp = 100; h2.name = "간달프"; h2.hp = 80; // 객체의 정보를 출력! System.out.println(h1.name); System.out.println(h1.hp); System.out.println(h2.name); System.out.println(h2.hp); // 객체의 메소드를 수행! h1.punch(); h2.punch(); } } ``` 위 코드의 결과는 아래와 같습니다. ``` 쥬리오 100 간달프 80 쥬리오의 펀치! 간달프의 펀치! ``` --- ## 확인하기 1. 객체를 만드는 방법은? 2. 객체의 값을 출력 하려면? 3. 객체의 값을 변경 하려면? 4. 객체에게 메소드를 수행시키려면?

Challenge

개념 실습! 학습 내용을 진짜 내 것으로 만들기!