본문 바로가기
개발/java

자바의 여러가지 개념을 정리한것

by 카앙구운 2015. 12. 13.
728x90
반응형

클래스는 추상 개념이며 오브젝트는 클래스의 인스턴스로 클래스가 실체로 만들어 지는 것을 말한다.


예를 들면 멍멍이라는 클래스에 우리집 초롱이와 옆집 왈왈이라는 오브젝트가 있는 것이다. 한마디로 클래스는 공통적인 특징을 나타내는 것이고 오브젝트는 구체적이고 실제 존재하며 고유성을 띄는 것을 말하는 것이다.

클래스 ==  개념  ==  타입

객체    ==  실체  ==  변수


정의:클래스는 표현 대상에 대한 설명/서술

정의:오브젝트는 클래스의 인스턴스


1.캡슐화

2.상속성

3.다형성

이 세가지 특징을 지원하는 언어를 객체지향 프로그래밍언어라고 한다.


1. 캡슐화

캠슐화는 "데이터 +데이터에 대한 조작"을 묶는 것

관련 있는 것을 묶어서 생각하는 것은 매우 자연스러운 일

묶어서 이름을 부여하는 것,바로 추상화이다.


2.상속성

하나의 클래스를 가지고 있는 특징들(데이터+조작)을 그대로 다른 클래스가 물려 받는 것

상속은 IS-A 관계를 가진다.(푸들 IS A 개)

기존의 클래스와 구분되는 특징만 기술하여 추가한다.

푸들을 상속받는 클래스가 있다면 개와 푸들의 특징을 그대로 물려받는다.(재사용/유연성)


3.다형성

상속성의 계층을 따라서 각각의 클래스에 한가지 이름을 줄 수 있는 것을 말한다.

상속성의 계층을 따라서 각 클래스에 동일한이름의 메소드를 사용할 수 있는 것

간단히 말해, 같은 명령어를 각기 다른 오르젝트로 줄 수 있다는 것을 뜻함


DOG d;

d= new Poodle();

d.bark();


d=new Bulldog();

d.bark();



정리

캠슐화, 상속성, 다형성

정의:캡슐화:데이터와 데이터를 조작

정의:상속성:상속 계층에 따라 특성(data,operation)을 공유

정의:다형성:다양한 형태에 동일한 명령을 사용





객체지향 분석/설계 방법록 요약

식별하고 일반화하고(object, class),

대상들간의 관계를 설정하고(inheritance, embedded)를 설정하고,

상호작용 하도록(behavior)한다.

 

 객체지향이란

사림이 세계를 보고 이해하는 방법으로 흉내낸 방법론




오버로딩과 오버라이딩


오버로딩(Overloading):과한 적재? 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술

오버라이딩(Overriding):덮어쓰기? 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 사용한다.



1.오버로딩(Overloading)

같은 클래스 안에 같은 이름의 함수를 여러개 정의하고,매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답하고도록하는 것을 말한다.

public class OverladingTest{

// 매개변수 없는 test()호출

void test(){

System.out.println("매개변수 없음");

}

//test에 매개변수로 int형 2개 호출

void test(int a, int b){

System.out.println("매개변수"+a+"와"+b);

}


//test에 매개변수로 double형 1개 호출

void test(double d){

System.out.println("매개변수"+d);

}

}


public class test{
public static void main(String[] args){
OverloadingTest ob=new OverloadingTest();


//test() 호출
ob.test();

//test(int a,int b);
ob.test(10,20);

//test(double d);
ob.test(123.4);

}
}

위에와 같이 같은 이름의 메소드를 여러개를 정의하고 매개변수만 변경하여 선언했을 때, 호출 매개변수에 따라 매칭되어 함수를 실행시킨다.



2.오버라이딩(Overriding)


상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것 처럼 상위 클래스가 가지고 있는 메소드도 하위 클래스로 상속되어 하위 클래스에서 사용할 수 있다. 하지만, 하위 클래스에서 메소드를 재정의 하여 사용할 수 있다.

상속관계에 있는 클래스 간에 같은 이름의 메소드를 정의 하는 기술을 오버라이딩이라 한다.


public class Employee{

public String name;

public int age;


//print()메소드

public void print(){

System.out.println("사원 이름은"+this.name+"이고, 나이는 "+this.age+"입니다.");

}

}

//Employee 상속


public class Manager extends Employee{

String jobOfManage;


//print() 메소드 오버라이딩


public void print(){

System.out.print("사원 이름은"+this.name+"이고, 나이는 "+this.age+"입니다.");

System.out.print("관리자는"+this.name+"이고, "+this.jobOfManage+"담당입니다.");

}


}


public class test{

public void main(String[] args){


//Manager 객체 생성

Manager mg=new Manager();


//변수 설정

mg.name="최영강";

mg.age="28";

mg.jobOfManage="PM";


//Overriding 된 Manager객체의 print()호출

mg.print();


}


}

결과==

사원이름은 최영강이고, 나이는 28입니다.

관지라 최영강은 PM 담당입니다.


Employee에 print()함술ㄹ 선언하고 Manager에서 Employee를 상속하여 print()메소드를 재정의 하였다.

main함수에서 Manager 객체를 생성후 print()메소드를 호출하면 오버라이딩된 Manager 객체의 print()메소드가 호출된다.



추상클래스와 인터페이스의 차이

 클래스

-일반 클래스

-추상클래스    -하나 이상의 추상메소드가 포함되는 경우

인터페이스

-모든 메소드가 추상메소드


추상메소드

-메소드의 선언부분만 존재하며 본문은 없음.

-본문 중괄호 {} 로 묶여져 있는 몸체를 말하며 중괄호가 비어 있더라도 중괄호가 존재하면 추상메소드가 아님

 추상메소드의 예) abstract public vod test(int a);


메소드를 선언 후 세미콜론만 찍어서 선언만 하고 자식클래스에서 구현하는 방법

일반 클래스를 상속받는 경우 메소드를 반드시 오버라이딩 할 필요가 없지만 추상클래스를 상속 받은 경우 자식클래스가 반드시 추상메소드를 오버라이딩해야 하기 때문에 메소드를 강제로 구현 할 때 많이 쓰임.



추상클래스와 인터페이스의 차이점은 바로 클래스인가 아닌가의 차이

추상클래스는 클래스로 구현시

-상속(extend)

인터페이스를 클래스로 구현시

-포함(implements)


이 차이는 중요한 차이임. 자바는 단일 상속만 지원하기 때문에 추상클래스를 상속 받는다면 다른 클래스를 상속 받을 수 없음.

그러나 인터페이스를 포함하는 클래스는 다른 클래스를 상속받을 수 있음.


추상클래스는 일반 클래스와 달리 자신을 new 명령어로 객체를 생성할 수 없음. 그러나 다형성을 통해 자식 클래스의 객체를 생성할 수 있음.


인터페이스를 쓰는 가장 큰 이유는 다중상속을 지원하지 않는 자바에서 다중상속의 단점을 빼고 장점을 취할 수 있기 때문임


1.상속을 통한 제약을 이용해 다형성을 구현한다.

2.다중상속은 여러 문제점이 있기에 제거하고 부족한 다형성은 인터페이스를 통해서 해결





728x90
반응형

댓글