제7장 클래스와 객체
이번 장에서 학습할 내용 객체지향이란? 객체 메시지 클래스 객체 지향의 장점 String 클래스
실제 세계는 객체로 이루어진다.
객체 지향이란? 실제 세계를 모델링하여 소프트웨어를 개발하는 방법
절차 지향과 객체 지향 절차 지향 프로그래밍(procedural programming): 문제를 해결하는 절차를 중요하게 생각하는 방법 객체 지향 프로그래밍(Object-Oriented Programming): 데이터와절차를 하나의 덩어리(객체)로 묶어서 생각하는 방법
객체 지향 방법 객체 지향으로 소프트웨어를 작성하는 것은 컴퓨터 하드웨어 부품을 구입하여서 컴퓨터를 조립하는 것과 비슷하다. 그림 7-3 . 객체 지향 방법
절차 지향과 객체 지향
중간 점검 문제 객체 지향 프로그래밍은 ________들을 조합하여서 프로그램을 작성하는 기법이다. 2. 객체 지향 프로그래밍의 시작은 __________년대에 개발된 ________언어이다.
객체 지향의 3대 특징 캡슐화 상속 다형성
캡슐화 캡슐화(encapsulation): 관련된 데이터와 알고리즘(코드)이 하나의 묶음으로 정리되어 있는 것 그림 7-4 . 객체 지향을 사용하면 코드를 재사용할 수 있다.
캡슐화와 정보 은닉
업그레이드가 쉽다. 라이브러리가 업그레이드되면 쉽게 바꿀 수 있다. 정보 은닉이 가능하기 때문에 업그레이드 가능 그림 7-5 . 정보 은닉의 장점
상속 상속(inheritance): 이미 작성된 클래스(부모 클래스)를 이어받아서 새로운 클래스(자식 클래스)를 생성하는 기법 기존의 코드를 재활용하기 위한 기법 그림 7-6 . 상속의 개념
다형성 하나의 이름(방법)으로 많은 상황에 대처하는 기법 개념적으로 동일한 작업을 하는 멤버 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해진다
객체 지향의 장점 신뢰성있는 소프트웨어를 쉽게 작성할 수 있다. 코드를 재사용하기 쉽다. 업그레이드가 쉽다. 디버깅이 쉽다.
쉬운 디버깅 예를 들어서 절차 지향 프로그램에서 하나의 변수를 1000개의 함수가 사용하고 있다고 가정해보자. -> 하나의 변수를 1000개의 함수에서 변경할 수 있다. 객체 지향 프로그램에서 100개의 클래스가 있고 클래스당 10개의 메소드를 가정해보자. -> 하나의 변수를 10개의 메소드에서 변경할 수 있다. 어떤 방법이 디버깅이 쉬울까?
중간 점검 문제 1. 자바에서 코드 재사용이 쉬운 이유는 관련된 ________와 ___________이 하나의 덩어리로 묶여 있기 때문이다. 2. 정보 은닉이란 ________을 외부로부터 보호하는 것이다. 3. 정보를 은닉하면 발생하는 장점은 무엇인가?
객체란? 객체(Object)는 상태와 동작을 가지고 있다. 객체의 상태(state)는 객체의 특징값(속성)이다. 객체의 동작(behavior) 또는 행동은 객체가 취할 수 있는 동작 그림 7-7 . 자동차 객체의 예
중간 점검 문제
메시지 소프트웨어 객체는 메시지(message)를 통해 다른 소프트웨어 객체와 통신하고 서로 상호 작용한다. 그림 7-8 . 메시지 전달
중간 점검 문제 객체들은 ________전달을 통해서 서로 간에 상호 작용을 한다. 자동차 객체에서 생각할 수 있는 메시지와 매개 변수에 대하여 나열하여 보라.
클래스 클래스(class): 객체를 만드는 설계도 클래스로부터 만들어지는 각각의 객체를 특별히 그 클래스의 인스턴스(instance)라고도 한다. 그림 7-9 . 객체를 클래스라는 설계도로 생성된다.
클래스와 객체
클래스의 구조
클래스의 예: 박스
클래스의 예: 자동차
객체를 생성하려면 Car myCar = new Car( ); 자바에서 객체를 생성하는 방법은 new 한가지뿐입니다.
기초 변수와 참조 변수 그림 7-10 . 변수의 종류
객체의 생성 ① 참조 변수 선언 - Car타입의 객체를 참조할 수 있는 변수 myCar를 선언한다. ② 객체 생성 – new 연산자를 이용하여 객체를 생성하고 객체 참조값을 반환한다. ③ 참조 변수와 객체의 연결 – 생성된 새로운 객체의 참조값을 myCar 라는 참조 변수에 대입한다.
객체를 가리키는 참조값을 담을 수 있는 변수만 생성됨. 주의 위의 문장으로 객체가 생성되는 것은 아님!!! 객체를 가리키는 참조값을 담을 수 있는 변수만 생성됨.
객체의 필드와 메소드 접근 도트(.) 연산자 사용! 객체의 멤버를 사용하려면 연산자 사용
필드와 메소드 접근
객체 생성 코드
실행 결과
객체를 하나 더 생성하는 코드
객체를 하나 더 생성하는 코드
중간 점검 문제 객체들을 만드는 설계도에 해당되는 것이 _____________이다. 같은 종류의 객체가 여러 개 생성될 때 각 객체의 변수와 메소드는 공유되는가? 아니면 각 객체마다 별도로 만들어지는가? 클래스 선언 시에 클래스 안에 포함되는 것은 _____과 ______이다. 객체의 멤버에 접근하는데 사용되는 연산자는 ________이다. 각 객체마다 별도로 가지고 있는 것은 클래스의 _________이다. 상품의 재고를 나타내는 클래스를 작성하여 보자. 클래스 안에 상품 번호, 재고 수량이 필드로 저장되고 재고를 증가, 감소하는 메소드를 작성하여 보라.
메소드 메소드는 입력을 받아서 처리를 하고 결과를 반환하는 가상적인 상자와 같다.
메소드의 구조
인수와 매개 변수 메소드 호출시 전달하는 값을 인수(argument) 메소드에서 값을 받을 때 사용하는 변수를 매개 변수(parameter)
객체의 일생
객체의 생성
참조값을 복사한다면 두 개의 참조 변수가 하나의 객체를 가리킬 수 있다.
객체의 소멸
객체의 소멸
중간 점검 문제 기초 변수와 참조 변수의 차이점은 무엇인가? 하나의 참조 변수가 다른 참조 변수로 대입되면 어떤 일이 발생하는가? 객체를 소멸시키려면 어떻게 하면 되는가?
문자열 객체 그림 7-16 . 문자열은 객체이다.
클래스에서 객체를 생성하는 방법 단 하나의 방법만이 존재한다. new 연산자만이 객체를 생성합니다.
.(도트) 연산자를 사용하여서 메소드를 호출합니다. 객체의 메소드의 호출 .(도트) 연산자를 사용하여서 메소드를 호출합니다.
String 클래스의 메소드
문자열의 결합 두 개의 문자열은 + 연산자를 이용하여 결합될 수 있다. String subject = "Money"; String other = " has no value if it is not used"; String sentence = subject + other; "Money has no value if it is not used"
숫자를 문자열로 변환 int x = 20; System.out.println("결과값은 “ + x); // ”결과값은 20” 이 출력된다. String answer = "The answer is " + 100; // “The answer is 100" 결과값은 20 The answer is 100
예제 문자열의 이 =13 A barking dog never Bites! A barking dog bar
중간 점검 문제 1. 변수를 크게 두 가지로 나누면 __________변수와 ___________변수로 분류할 수 있다. 2. 객체를 생성하는 키워드는 ___________이다. 3. 문자열은 클래스 ___________의 객체이다. 4. 문자열의 길이를 반환하는 메소드는 _____________이다. 5. 변수 i의 값을 문자열로 변환하는 가장 간단한 방법은 ___ 연산자를 사용하는 것이다.
문자열을 숫자로 변환 문자열 “123”을 숫자 123으로 변환 랩퍼 클래스(wrapper class)를 사용한다. (예) Integer obj = new Integer(10);
랩퍼 클래스의 유용한 메소드
int i = Integer.parseInt("123"); // 변수 i에 정수 123이 저장된다. double d = Double.parseDouble("3.141592"); // 변수 d에 실수 3.141592가 저장된다.
중간 점검 문제 변수를 크게 두 가지로 나누면 __________변수와 ___________변수로 분류할 수 있다. 객체를 생성하는 키워드는 ___________이다. 문자열은 클래스 ___________의 객체이다. 문자열의 길이를 반환하는 메소드는 _____________이다. 변수 i의 값을 문자열로 변환하는 가장 간단한 방법은 ___ 연산자를 사용하는 것이다.