객체지향 언어


 흔히 절차지향언어랑 많이 비교 되지만 객체지향언어가 절차적 즉 순서대로 실행 되어지는 것이 아닌건 아니다.

음 말이 어려운데 말하고 싶은거는 객체지향이 절차지향에 반대말이 아니란 것이다! 결국 실행은 한줄씩 순서대로 진행한다.

그리고 또 어떤 것이 좋고 어떤 것이 나쁜 개념이 아니다 각각의 특징이 있다.


 객체지향 언어는 각각의 기능? 을 클래스로 만들고 (모듈화) 그 클래스의 객체를 생성하여 코딩하는 것인데


-재사용성이 높고

-유지보수가 용이하며

-제어자의 이용으로 신뢰성 높은 프로그래밍이 가능하다(데이터 보호) 


 라는 특징을 가지고있다.




클래스와 객체


클래스 : 객체를 정의해 놓은 것

객체 : 클래스를 바탕으로 만들어진 객체


흔히 붕어빵 기계(틀)와 붕어빵 예시가 나오는데

이 때 붕어빵 기계를 클래스

붕어빵을 객체라고 생각한다.


붕어빵 기계는 붕어빵을 만들기 위해 존재하는 것으로

그 자체 만으로는 쓸모가 없다. 단지 붕어빵(객체, 인스턴스)을 만들기 위해 존재한다.


만약 붕어빵 틀 없이 붕어빵을 만들면 매번 다른 붕어빵이 생기고 모양을 잡는 등 힘들 것이다.

하지만 붕어빵 기계가 있으면 고민없이 그대로 찍어내면 된다.


이를 아까 말한 객체지향의 특징과 같이 생각해보면 좋다.




객체와 인스턴스


클래스로부터 객체를 만드는 과정 : 클래스의 인스턴스화

클래스로부터 만들어진 객체 : 인스턴스


객체와 인스턴스는 같은 의미지만

객체는 모든 인스턴스를 대표하는 포괄적인 의미를 가진다.



객체의 구성요소


속성과 기능, 두종류의 요소로 이루어져 있으며

멤버변수와 메소드 라는 용어로 많이 쓰인다.


자동차로 예를들어보면

전폭, 전고, 전장(크기), 배기량, 연비, 색상, 최고속력 등은 속성이고

시동걸기, 가속하기, 감속하기, 에어컨작동 등은 기능이다.


이를 토대로 자동차 클래스를 만들어보면

다음과 같이 만들어 볼 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Car{
    int speed=0;
    int maxSpeed=200;
    String color;
    boolean power;
    
    void startEngine() {
        power= !power;
    }
    void accel(){
        if(speed<maxSpeed)
            speed++;
    }
    void breaking(){
        if(speed!=0)
            speed--;
    }
}
cs


인스턴스의 생성과 사용


1
2
3
4
5
6
7
8
9
10
public static void main(String args[]) {
        Car car = new Car();
        car.color="white";
        car.accel();
        //car.breaking();
        System.out.println("현재 속력은"+car.speed+"입니다.");
        
        Car car2=car;
        System.out.println(car2.speed);
    }
cs


현재 속력은1입니다.

1


인스턴스 생성방법은 이렇다.

Car car= new Car();

클래스명 변수명 = new 클래스명();

new 키워드를 사용하며 이때 저장 하는 참조변수의 타입과 인스턴스의 타입은 같아야한다. (다형성 예외)


생성한 인스턴스는 변수명에 .을붙여 접근 가능하다

car.멤버변수or메소드


이때 car라는 변수는 참조변수로 생성된 인스턴스공간의 주소값을 저장한다

하나의 참조변수는 하나의 값만을 저장하며

여러 참조변수가 하나의 인스턴스를 가르킬 수 있다.


car 와 car2는 같은 인스턴스 주소값을 저장하고 있으며 

그래서 car.speed와 car2.speed는 같은 값을 반환한다.



+ Recent posts