본문 바로가기

프로그래밍/Java

Java_객체지향언어(1)_클래스와 객체_객체 생성과 사용 방법

① 객체지향 언어란?
: 코드 간의 서로 관계를 맺어 줌으로써 보다 유기적으로 프로그램을 구성하는 것이다.
- 객체지향 언어의 특징
캡슐화
→ 상속
→ 추상화
→ 다형성

② 객체지향 언어를 사용하는 이유
- 코드의 재사용성이 높다. > 새로운 코드를 작성할 때 기존의 코드를 이용해 쉽게 작성 가능하다.
- 코드의 관리가 용이하다. > 코드간의 관계를 이용해 쉽게 코드를 변경할 수 있다.
- 신뢰성 높은 프로그래밍을 가능하게 한다.
> 제어자와 메서드를 통해 데이터를 보호하고 코드의 중복을 제거하여 오동작을 방지할 수 있다.

③ 클래스와 객체
: 클래스란 ? 객체를 정의해 놓은 것. > 객체를 생성하는데 사용
: 객체란 ? 실제로 존재하는 것. > 객체를 가지고 있는 기능과 속성에 따라 만든다.
ex) 클래스는 제품의 설계도, 객체는 제품

④ 객체의 속성과 기능
: 속성(색깔, 전원, 볼륨) → 멤버변수
기능(켜기, 끄기, 볼륨 높이기, 볼륨 낮추기) → 메서드

class smartphone{
    String color;	// 색깔
    boolean power;	// 전원
    int volume; 	// 소리
    
    void power() { power= !power; }
    void volumeUp() { ++volume; }
    void volumeDown() { --volume; }
}


⑤ 객체와 인스턴스 (객체 ≒ 인스턴스)
: 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 한다.

⑥ 한 파일에 여러 클래스 작성하기
올바른 작성)
- public 클래스가 있는 경우, 소스파일의 이름과 public class의 이름은 반드시 일치해야 한다.
- public 클래스가 없는 경우, 소스파일의 이름은 아무거나 가능하다.

잘못된 작성)
- 하나의 소스 파일에 둘 이상의 public class가 존재하면 안 된다.
- 소스파일의 이름과 public class의 이름은 대소문자까지 일치해야 한다.

⑦ 객체의 생성과 사용

// 클래스명 변수명; 변수명 = new 클래스명();을 한 문장으로 간단히 가능.
클래스명 변수명 = new 클래스명();

class practice {
	public static void main(String[] args){
    	smartphone sp=new smartphone();
        sp.volume=3;
        sp.volumeUp();
        System.out.println("현재 볼륨은 "+sp.volume+" 입니다.");
    }
}

class smartphone {
    String color;
    boolean power;
    int volume;
    
    void power() { power=!power; }
    void volumeUp() { ++volume; }
    void volumeDown() { --volume; }
}

결과
현재 볼륨은 4 입니다.


smartphone sp = new smartphone();
→ smartphone클래스 타입의 참조변수 sp를 선언하여 연산자 new에 의해 smartphone 클래스의 인스턴스가 메모리의 빈 공간에 생성된다. 그리고 대입연산자(=)에 의해 생성된 객체의 주소값이 참조변수 sp에 저장된다. 그러면 참조변수 sp를 통해 smartphone인스턴스에 접근할 수 있다.

sp.volume=3;
→ 참조변수 sp에 저장된 주소에 있는 인스턴스의 멤버변수 volume에 3을 저장한다.
인스턴스 멤버변수(속성)를 사용하려면 '참조변수.멤버변수'를 사용하면 된다.

sp.volumeUp();
→ 참조변수 sp가 참조하고 있는 smartphone인스턴스의 volumeUp메서드를 호출해서 volume을 1 증가 시킨다.

⑧ 객체 배열
: 많은 수의 객체를 다뤄야 할 때, 배열로 다루어 사용한다.
- 생성 방법은 객체 생성과 다를 것 없이 [] 를 붙여주기만 하면 된다.

smartphone[] spArr= new smartphone[3]; // 참조변수 객체 배열 생성

// 객체를 생성해서 배열의 각 요소에 저장
spArr[0] = new smartphone();
spArr[1] = new smartphone();
spArr[2] = new smartphone();

// 배열의 초기화 블럭을 사용
smpartphone[] spArr={ new smartphone(), new smartphone(), new smartphone() };

// 다뤄야할 객체 수가 많을 때는 for문을 사용
smartphone[] spArr = new smartphone[10];

for(int i=0; i<spArr.length; i++) {
	spArr[i]=new smartphone();
}