IT/java

[Java 기초] 정의

원창연 2020. 12. 20. 18:08

ㅁ 객체지향 프로그래밍

객체지향 프로그래밍(Object-Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)행위(behave)로 이루어진 객체로 만드것

 

   좋은 객체를 만드는 법이다. 이것을 다른 말로는 설계를 잘하는 법이라고 할 수 있다. 좋은 설계는 현실을 잘 반영해야 한다. 

 

ㅁ 부품화

   정신적인 것은 실체가 없고, 무한하고, 유연하다. 이러한 특성은 정신이 가진 장점이면서  소프트웨어의 극치다. 하지만 정신의 이러한 특성은 때로 오해나 모순 같은 문제점을 유발한다. 소프트웨어도 이러한 문제점을 그대로 상속받는다. 이러한 문제점을 극복하기 위한 노력 중의 하나가 부품화라고 할 수 있다

 

ㅁ은닉화 캡슐화

  제대로된 부품이라면 그것이 어떻게 만들어졌는지 모르는 사람도 그 부품을 사용하는 방법만 알면 쓸 수 있어야 한다. 이를테면 모니터가 어떻게 동작하는지 몰라도 컴퓨터와 모니터를 연결하는 방법만 알면 화면을 표시 할 수 있는 것과 같은 이치다. 즉 내부의 동작 방법을 단단한 케이스 안으로 숨기고 사용자에게는 그 부품의 사용방법만을 노출하고 있는 것이다. 이러한 컨셉을 정보의 은닉화(Information Hiding), 또는 캡슐화(Encapsulation)라고 부른다 

 

ㅁ 인터페이스 

   컴퓨터와 모니터를 만드는 업체들은 위와 같은 케이블의 규격을 공유한다. 모니터 입장에서는 컴퓨터가, 컴퓨터 입장에서는 모니터가 어떤 식으로 만들어졌는지는 신경쓰지 않는다. 각각의 부품은 미리 정해진 약속에 따라서 신호를 입, 출력하고, 연결점의 모양을 표준에 맞게 만들면 된다. 이러한 연결점을 인터페이스(interface)라고 한다.

   - 인터페이스에 정의된 모든 메소드는 상속받는 클래스에서 전부 오버라이딩해야 한다.

   - 인터페이스로부터 상속 받을 때 implements키워드 사용

 

ㅁ 클래스와 인스턴스

    클래스는 연관되어 있는 변수와 메소드의 집합

    new 키워드를 통하여, 이렇게 만들어진 구체적인 제품을 인스턴스(instance)라고 부른다. 아래의 관계를 기억하자.

   

   맴버(member)는 영어로 구성원이라는 뜻이다. 객체도 구성원이 있는데 아래와 같다.

  • 변수
  • 메소드

  ※ 클래스도 인스턴스도 맴버를 가질수 있지만 인스턴세는 맴버값이 다르다

 

  인스턴스 변수와 클래스 변수는 아래와 같이 부르기도 한다.

  • 인스턴스 변수 -> Non-Static Field
  • 클래스 변수 -> Static Field
더보기

Class         : 객체를 만들어 내기 위한 설계도

Constructor : new  Instance 통하여 초기화담당   ==>초기화시 이름, 나이, 출생지 받는 것

Instance     : 구현된 구체적인 실체(메모리사용)        == 생성자라고 함

ㅁ 상속(Inheritance)

    상속(Inheritance)이란 물려준다는 의미다. 어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능을 상속

※ 부모 클래스와 자식 클래스의 관계를 상위(super) 클래스와 하위(sub) 클래스라고 표현하기도 한다. 또한 기초 클래스(base class), 유도 클래스(derived class)라고도 부른다

Animal이란 공통성격을 만들어 Cat, Mouse, Duck등 상속 관계

ㅁ 생성자 

     기본생성자, 즉 매개변수가 없으면 start 

 

ㅁ Overriding

   상속은 상위 클래스의 기능을 하위 클래스에게 물려주는 기능

 

ㅁ Overloading

   이름은 같지만 시그니처는 다른 메소드를 중복으로 선언 할 수 있는 방법을 메소드 오버로딩(overloading)이라고 한다.

 

※ Overriding vs Overloding

    riding(올라탄다)을 이용해서 부모 클래스의 메소드의 동작방법을 변경하고

    loading을 이용해서 같은 이름, 다른 매개변수의 메소드들을 여러개 만들 수 있다는 사실을 아는 것이 중요

    ※ 참고로 overriding는 재정의라는 사전적인 의미

 

ㅁ abstract 

    abstract란 한국어로는 추상으로 번역된다. 이에 대한 정의는 뒤에서 내리도록 하고 지금 단계에서는 abstract라는 것이 상속을 강제하는 일종의 규제라고 생각하자. 즉 abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것이 abstract다. 

   - 추상 메소드는 선언만 되어 있고 구현 부분이 없는 메소드로 메서드의 결과형 앞에 abstract를 기재해서 생성

   - 추상 메소드는 반드시 하위 클래스에서 오버라이딩 되어서 구현되어야 한다.

   - 추상 메소드는 일반적인 멤버 변수와 메소드를 가질 수 있습니다.

   - 하지만 객체를 생성하지 못하여 상속을 통해서만 사용되어 집니다.

 

ㅁ polymorphism(다형성)

    다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것

    - overloging 과 다형성

    - 클래스와 다형성

    - 인터페이스와 다형성

 

ㅁ 참조

    - 복제

public class Test {

	public static void runValue() {
		int a = 1;
		int b = a;
		b = 2;
		System.out.println("runValue a " + a);
		System.out.println("runValue b " + b);
	}

	public static void main(String[] args) {
		runValue();
	}

}

   a= 1, b = 2값이다

 

   - 참조

public class Test {

	public static void runReference() {
		A a = new A(1);
		A b = a;
		b.id = 2;
		System.out.println("runReference, " + a.id);
		System.out.println("runReference, " + b.id);
	}

	public static void main(String[] args) {
		runReference();
	}
}

class A{
    public int id;
    A(int id){
        this.id = id;
    }
}

    ※ 만일 b에 담긴 인스턴스의 id 값을 2로 변경했을 뿐인데 a.id의 값도 2가 된 것이다

 

ㅁ제네릭

   제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 말이 어렵다. 아래 그림을 보자.

※ 제네릭으로 올 수 있는 데이터 타입을 특정 클래스의 자식으로 제한할 수 있다

 

ㅁ 컬렉션즈 프레임워크(Collections FrameWork) 

    배열의 불편한 점이 있었는데 그 중의 하나가 한번 정해진 배열의 크기를 변경할 수 없다는 점이다. 이러한 불편함을 컬렉션즈 프래임워크을 해결함

 그럼 이제부터 컬렉션즈 프래임워크가 무엇인가 본격적으로 알아보자. 컬렉션즈 프래임워크라는 것은 다른 말로는 컨테이너라고도 부른다. 즉 값을 담는 그릇이라는 의미이다. 그런데 그 값의 성격에 따라서 컨테이너의 성격이 조금씩 달라진다. 자바에서는 다양한 상황에서 사용할 수 있는 다양한 컨테이너를 제공하는데 이것을 컬렉션즈 프래임워크라고 부른다. ArrayList는 그중의 하나다.

위의 그림은 컬렉션즈 프래임워크의 구성을 보여준다. Collection과 Map이라는 최상위 카테고리가 있고, 그 아래에 다양한 컬렉션들이 존재한다. 그럼 구체적인 컬렉션즈 프래임워크 클래스들을 살펴보자.

 

참고 사이트 : opentutorials.org/course/1223/6088opentutorials.org/course/1223/6446