개발/Java

[Java] 자바 객체지향 프로그래밍 언어 특징

hojak99 2015. 11. 3. 14:36

 

 

객체 지향의 개념


실 세계의 개체(Entity)를 속성(Attribute)과 메소트(Method)가 결합된 형태의 객체(Object)로 표현하는 개념, 객체간의 메시지 통신을 통해 시스템을 구현하는 개발 방법

 


객체지향 방법론의 특징

- 재사용성, 유지보수성, 이식성

- 모형의 적합성 : 현실세계 및 인간의 사고방식과 유사

- 일관성, 추적성 : 전체 공정에서 각 단계간의 전환과 변경이 자연스럽고 신속 함



객체지향의 기본 구성요소 및 개념


클래스(Class)

- 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(Attribute)과 행위(Behavior)를 정의 한 것

- 객체지향 프로그램의 기본적인 사용자 정의 데이터형(user define data type)

- 클래스는 프로그래머가 아니지만 해결해야 할 문제가 속하는 영역에 종사하는 사람이라면 사용할 수 있고 다른 클래스 또는 외부요소와 독립적으로 디자인 되어야 한다.


객체(Object)

- 클래스의 인스턴스(실제로 메모리상에 할당된 것)

- 자신 고유의 데이터(attribute)를 가지며 클래스에서 정의한 행위(behavior)를 수행

- 객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용한다.


메서드(Method)

- 클래스로부터 생성된 객체를 사용하는 방법

- 객체에 명령을 내리는 메시지라 할 수 있다.

메시지(Message)

- 객체간의 통신은 메시지를 통해 이루어진다.

 

캡슐화(Encapsulation)-정보은닉


 개념

- 객체의 상세한 내용을 객체 외부에 철저히 숨기고 단순히 메시지만으로 객체와의 상호작용을 하게 하는 것


역할 

- 객체의 내부고조와 실체 분리로 내부 변경이 프로그램에 미치는 영향 최소화 하여 유지보수도 용이하게 함


특징 

- 클래스를 선언하고 그 클래스를 구성하는 객체에 대하여 "public" 선언시 외부에서 사용가능 하나 "privat"선언 시 외부사용 불가

 

추상화


개념 

- 현실세계의 사실을 그대로 객체로 표현하기 보다는 문제의 중요한 측면을 주목하여 상세내역을 없애나가는 과정


역할

- 복잡한 프로그램을 간단하게 해주고 분석의 초점을 명확히 함


특징

- 객체지향 언어에서는 클래스를 이용함으로써 데이터와 프로세스를 함께 추상화의 구조에 넣어 보다 완벽한 추상화를 실현

 

다형성(Polymorphism)


개념 

- 하나의 인터페이스를 이용하여 서로다른 구현방법을 제공하는 것


역할

- 특정 지식을 최소화한 관련된 클래스들을 위한 일관된 매개체를 개발하는 수단을 제공


특징 

- Overloading(동일한 이름의 Operation 사용-수평적), Overriding(수퍼클래스의 메소드를 서브 클래스에서 재정의-수직적)

 

상속성 (Inheritance)

개념

- 수퍼클래스가 갖는 성질을 서브클래스에 자동으로 부여하는 개념


역할

- 프로그램을 쉽게 확장할 수 있도록 해주는 강력한 수단


특징

- 상속의 효과는 클래스를 체계화 할 수 있으며 기존의 클래스로부터 확장이 용이

 

연관성 (Relation)


개념 

- 클래스간의 연관관계를 정의


역할

- 객체간의 관계를 세부적으로 정의하여 구현 용이


특징 

- 일반화(Generalization is-a), 상세화(Specialization has-a), 집단화(Aggregation is-part-of)

 

 

다형성(Polymorphism)


다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 키보드의 키를 통해서 비유를 들어보겠다. 키보드의 키를 사용하는 방법은 '누른다'이다. 하지만 똑같은 동작 방법의 키라고 하더라도 ESC는 취소를 ENTER는 실행의 목적을 가지고 있다. 다형성이란 동일한 조작방법으로 동작시키지만 동작방법은 다른 것을 의미한다.

package org.opentutorials.javatutorials.polymorphism;

class O{

    public void a(int param){

        System.out.println("숫자출력");

        System.out.println(param);

}

    public void a(String param){

        System.out.println("문자출력");

        System.out.println(param);

    }

}

public class PolymorphismOverloadingDemo {

    public static void main(String[] args) {

        O o = new O();

        o.a(1);

        o.a("one");

    }

}

클래스 O의 메소드 a는 두개의 본체를 가지고 있다. 동시에 두개의 본체는 하나의 이름인 a를 공유하고 있다. 같은 이름이지만 서로 다른 동작 방법을 가지고 있기 때문에 오버로딩은 다형성의 한 예라고 할 수 있다



자바에서의 상속의 개념

 

상속이란 부모 클래스가 가지고 있는 모든 것을(생성자 제외) 자식클래스가 물려받아 같이 공유하며 나아가 확장(extends)하는 개념이다. 부모 클래스를 상위 클래스(superclass)로 부르며 상속받는 자식 클래스를 하위클래스(subclass)라고 부른다.

 

확장(extends)한다는 말은 부모클래스에서 가지고있는 추상적인 메소드를 자식클래스에서 구체적인 메소드로 오버라이드 할수 있기 때문에 자바에서는 상속을 정의할때 확장(extends)한다 라고 정의합니다.

 

상속의 장점은 코드가 중복되는것을 막을수 있고 공통적인 코드를 변경할시 시간을 단축 시킬수 있다는 점 입니다. 예를 들면 어떤 상위 클래스를 상속받는 하위클래스가 여러가지 있을 때 상속을 하지 않았을땐 하위클래스 들이 가지고 있는 코드를 하나 하나 변경해주어야 하지만 상속을 사용했을때 상위클래스에 있는 내용만 변경해주면 되어 시간을 단축시킬수 있다는 것이다.

 

 

class Person {

int age;

public String name;

protected int height;

private int weight;

public void setWeight(int weight){

this.weight= weight;

}

public int getWeight(){

return weight;

}

}

class Student extends Person {

// Student 클래스가 Person 클래스를 상속받음

void set(){

age = 30;

name = "홍길동";

height = 175;

setWeight (99);

}

public static voi

d main(String[] args) {

Student s = new Student(); // Student 객체 생성

s.set(); //Person클래스를 상속 받았기 때문에 Person클래스에 있는 매개변수를 사용할 수 있음.

System.out.println("나이 : "+s.age+"\n이름 : "+s.name+"\n: "+s.height+"\n몸무게 : "+s.getWeight());

}

}

 

여기서 Person 클래스와 Student 클래스가 있는데 Student 클래스는 Person 클래스를 상속 받았기 때문에 Person클래스는 Student클래스의 상위클래스가 되고 Student 클래스는 Person클래스의 하위 클래스가 됩니다 .Student 클래스는 Person클래스가 가지고 있는 메소드와 매개변수를 자신의 것처럼 사용할 수 있습니다.

 


 

 

 

 

 

 

 

 

반응형