본문 바로가기
Programming Language/Java

[자바의 정석] ch6-1 ~ ch6-10 객체지향 언어 정리

by Baest 2021. 7. 13.

학원을 다니지만 진도가 너무 빨라서 별도로 유튜브 보며 정리중이다.

(마침 학원에서 나눠준 책이 Java의 정석 기초편이라 남궁성님의 유튜브를 보는중..!)

Java에서 가장 중요한 개념인 객체지향 부분은 두 번째로 듣고 있는데, 남궁성님이 말씀하신대로 정리를 하는 것이 학습에 도움될 것 같아 블로그에 정리해보려고 한다.

 

자바의 정석 기초편에 60% 정도의 내용이 담겨있고 3판에 100%(실전)의 내용이 담겨있다고 한다.

강사님은 기초편 + 3판까지 보고 웹이나 모바일 중 관심있는 부분의 실습을 진행할 것을 추천하심.. 

 

============================================================================

 

ch6-1 객체지향 언어

OOP(Object Oriented Programming)

객체지향 언어: 80년대 초 소프트웨어의 위기에 빠르게 대응하지 못하였음 -> 해결책: 객체지향 언어 도입

객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙)

 

핵심개념: 1)캡슐화, 2)상속, 3)추상화, 4)다형성

 

 

ch6-2 클래스와 객체

클래스: 객체를 정의해 놓은 것 (TV 설계도 혹은 붕어빵 기계)

클래스의 용도: 객체를 생성할 때 사용

 

객체: 실제로 존재하는 것. 사물 또는 개념 (TV 혹은 붕어빵)

객체의 용도: 객체가 가지고 있는 기능과 속성에 따라 다름 

 

 

ch6-3 객체의 구성요소 - 속성과 기능

하드웨어의 소프트웨어화(프로그램화=코드)가 진행 (오디오플레이어가 컴퓨터 내부로 들어간 것 처럼)

 

예를들어 TV 를 소프트웨어로 만들 경우 아래와 같은 속성과 기능이 필요하다.

 

객체 = 속성(변수) + 기능(메서드)

속성: 크기, 길이, 높이, 색상, 볼륨, 채널 등

기능: 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 변경 등 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Class Tv{// Tv 클래스(Tv 설계도)
 
    //q
    String color;
    boolean power;
    int channerl;
 
    //메서드
    void power() {    
        power = !power;
    }
    void channelUp() {
        channel++;
    }
    
    void channelDown() {
        channel--;
    }
 
}
cs

 

ch6-4 객체와 인스턴스

객체: 모든 인스턴스를 대표하는 일반적 용어

인스턴스: 특정 클래스로부터 생성된 객체(예: Tv인스턴스)

-> 뉘앙스 차이가 있으나 객체와 인스턴스는 크게보면 같다고 생각하면됨

 

                       인스턴스화(제품생성)

클래스(설계도) -------------------------------> 인스턴스,객체(제품)

 

 

<-------------------------------------------------------------정리------------------------------------------------------------->

Q. 클래스(설계도)가 왜 필요한가?

A. 객체(제품)를 생성하기 위해

 

Q. 객체(제품)가 왜 필요한가?

A. 객체(제품)를 사용하기 위해

 

Q. 객체(제품)를 사용한다는 것은?

A. 객체(제품)가 가진 속성(변수)과 기능(메서드)을 사용하려고

 

 

ch6-5 하나의 소스파일에 여러 클래스 작성

1
2
3
4
5
6
7
8
9
10
11
Hello2.java
 
 
public class Hello2 {
 
}
 
 
public class Hello3 {
 
}
cs

 

 

*public class가 있는 경우, 소스파일의 이름은 반드시 public class의 이름과 일치해야함

*public class가 없는 경우, 소스파일의 이름은 java 파일의 클래스명 중 원하는 것으로 사용 가능

*하나의 소스파일에는 하나의 public class만 허용

*하나의 소스파일에는 하나의 클래스만 작성하는 것이 바람직

 

ch6-6 객체의 생성과 사용

1.객체 생성 방법

클래스명 변수명;             //클래스의 객체를 참조하기 위한 참조변수를 선언

변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장

 

Tv t;                            //Tv클래스 타입의 참조변수 t를 선언

t = new Tv();                //Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장

 

-> t라는 참조변수(리모콘) 만들고 new Tv()라는 객체도 만들고 마지막으로 = 으로 리모콘과 Tv 연결

한 문장으로 만들면 Tv t = new Tv();

 

2. 객체의 사용

t.Channel = 7;             //Tv인스턴스의 멤버변수 channel 의 값을 7로 한다. (t라는 리모콘으로 채널 조정)

t.ChannelDown();         //Tv인스턴스의 메서드 channelDown()을 호출한다.

 

 

클래스 작성 -> 객체 생성 -> 객체 사용

 

*Tv와 Tv리모콘의 타입이 일치해야함 (에어컨 리모콘으로 Tv를 켤 수는 없으니까^^)

 

ch6-7 객체의 생성과 사용 - 예제

 

*하나의 인스턴스를 여러 개의 참조변수가 가리키는 경우(가능)

*여러 인스턴스를 하나의 참조변수가 가리키는 경우(불가능)

 

*가비지 컬렉터: 불필요한 메모리 낭비를 방지하기 위해 사용하지 않는 메모리 정리(제거)해줌

 

 

ch6-8 객체 배열

객체 배열 == 참조변수 배열

Tv tv1, tv,2, tv3;   ->  Tv[] tvArr = new Tv[3];      (Tv타입 참조변수 * 3개라는 뜻)

 

 

ch6-9 클래스의 정의(1)

클래스 

1)설계도

2)데이터+함수

3)사용자정의타입

 

클래스 == 데이터 + 함수

 

변수 -> 배열(같은 타입만) -> 구조체(다른타입도 가능) -> 클래스(서로 관련 있는 데이터, 함수 묶어놓음)

 

1)변수: 하나의 데이터를 저장할 수 있는 공간

2)배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간

3)구조체: 서로 관련된 여러 데이터(종료 관계X)를 하나로 저장할 수 있는 공간

4)클래스: 데이터와 함수의 결합(구조체 + 함수)

 

 

ch6-10 클래스의 정의(2)

사용자 정의 타입: 원하는 타입을 직접 만들 수 있음

 

class Time{

     int hour;

     int minute;

     int second;

}

 

                                                                        Time t = new Time();

int hour = 12;                                                       t.hour = 12;

int minute = 34;                       ->                          t.minute = 34;

int second = 56;                                                    t.second = 56;

 

 

============================================================================

 

유튜브 링크(ch6-1): https://www.youtube.com/watch?v=CXuA31XcBZ0&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=50