자바에서 객체지향, 상속, 캡슐화 등 프로그래밍에 필요한 기본적인 개념을 정리해봤어.

객체지향은 소프트웨어 모듈의 재사용성과 독립성을 위해 고안된 프로그래밍 방식이야. 여기서 객체라는 것은 효율적인 정보관리를 위하여 의미를 부여하고 분류하는 개념적인 단위이지.

즉 객체지향이란 것은 객체들이 메시지를 통하여 통신함으로써 원하는 결과를 얻고 각 객체는 고유의 데이터와 데이터를 처리할 수 있는 메소드로 구성되는 방식이라고 할 수 있어.

객체지향의 반대적인 개념으로 절차지향이 있는데 절차지향은 데이터 구조와 그 데이터를 변화시키는 알고리즘으로 구성되는 프로그래밍 방식이야. 아래의 이미지를 보면 조금 더 이해가 쉬울꺼야.

객체라는 것은 효율적으로 정보를 관리하기 위해 사람들이 의미를 부여하고 분류하는 논리적인 단위를 말해. 일반적으로 객체는 속성의 값을 나타내는 데이터와 데이터를 변경하거나 조작할 수 있는 메소드로 구성되지.

또 객체지향에 있어서 클래스는 매우 중요한 개념이야. 클래스는 객체를 생성하는 일종의 템플릿과 같은 역할을 하는데 객체는 항상 클래스로부터 생성된다고 생각하면 돼.

자바에서 클래스는 항상 자료구조인 필드와 연산을 담당하는 메소드의 두 가지 구성요소로 이루어져. 간혹 클래스로 부터 생성된 객체를 인스턴스(Instance)라고 부르는데 인스턴스와 객체는 같은 의미라고 생각하면 돼.

자바 프로그래밍에서 정보를 처리하는 주체는 클래스가 아니라 객체가 담당하는 역할이야. 즉 객체지향 프로그래밍은 클래스를 생성하고 이 클래스를 사용하여 다양한 정보를 처리하는 객체를 만들어내어 프로그래밍을 구성한다고 할 수 있는 거지.

만약에 “학생”이라는 클래스가 있다면 객체는 아래처럼 생성할 수 있어.

학생1 = new 학생(홍길동, 남자, 21살);
학생2 = new 학생(이길동, 남자, 19살);
학생3 = new 학생(강진주, 여자, 25살);

그림으로 나타낸다면 아래와 같이 나타낼 수 있어.

클래스끼리는 상속을 할 수 있어.

클래스끼리는 상속을 할 수 있는데 상속관계의 클래스들은 계층 구조를 구성할 수 있어. 상속 관계에서 상속을 받는 하위 계층의 클래스는 상위 계층의 모든 요소를 상속받고 새로운 자료 구조와 메소드를 추가할 수 있어.

즉 상속을 받는 하위 클래스는 상위의 클래스를 확장하는 개념으로 생각할 수 있어. 이런 상속의 개념을 통해 소프트웨어의 재사용성을 구현할 수 있게 되는 거지.

상속을 할 때 새로운 클래스를 생성할 때는 기존 클래스의 하위 클래스로 선언하면 돼. 그리고 새로 생성된 클래스에 속성이나 메소드를 추가하여 기존 클래스를 기능을 확장시키는 거야.

자바 프로그래밍은 캡슐화도 중요해.

또 자바 프로그래밍에는 캡슐화라는 개념이 있는데 캡슐화라는 것은 객체의 기능만 제공하고 실제 처리를 수행하는 로직은 감추는 개념이야.

즉 객체를 프로그래밍을 할 때 숨겨야 하는 정보와 공개해야 하는 정보를 구분하여 작성함으로써 객체를 사용하는 사용자는 기능만 알고 사용하게 되고 그 기능을 처리하는 로직은 숨김으로서 프로그램의 안정성을 확보하는 거지.

프로그램을 캡슐화시키면 객체에 포함된 정보의 손상을 방지할 수 있고 정해진 사용법으로만 사용하도록 강제하게 되어 프로그램의 오용을 막을 수 있어. 또 데이터가 바뀌어도 다른 객체에 영향을 주지 않아 독립성이 유지되고 기능을 통해 처리된 결과만 사용하기 때문에 뛰어난 이식성을 가지게 되지. 즉 객체 자체를 모듈화하게 되어 새로운 시스템에 적용하는 것이 가능해지는 거야.

자바 프로그래밍의 특징은 다형성이야.

다형성(Polymorphism)은 하나의 인터페이스를 사용하여 다양한 구현 방법을 제공하는 것을 말해.

예를 들어 “모형”이라는 상위 클래스 타입의 객체 변수가 있다면 아래와 같이 새로운 형태의 클래스 객체를 생성하여 할당 할 수 있는 거야. 즉 상속과 메소드 오버라이드등의 개념이 결합된 거라고 할 수 있어.

모형 A; //상위 클래스 타입의 객체 변수 A를 선언
A = new 타원(); //상위 클래스 타입의 객체 변수 A에 타원 클래스의 객체를 생성하여 할당
A = new 사각형(); //상위 클래스 타입의 객체 변수 A에 사각형 클래스의 객체를 생성하여 할당
A.draw(); //사각형 클래스에 기술된 draw()메소드를 수행하여 선언된 사각형을 그림

위의 이미지에서 모형에서 선언된 draw() 메소드는 할당되는 하위 클래스의 객체에 따라 다양한 변신을 시도하여 서로 다른 결과를 나타내는데 메시지에서 요구한 메소드(draw())의 매핑을 동적으로 실행하는 거야.

메시지(Message)라는 건 객체에게 일을 시키는 행위라고 생각하면 되는데 다음의 3가지로 구성돼.

  • 메시지를 받을 객체의 이름(주소)
  • 송신 객체가 실행을 원하는 수신객체의 메소드 이름
  • 실행을 원하는 메소드에 전달할 매개변수

아래는 객체지향 자바 프로그래밍의 간단한 예야. 위에서 정리한 내용을 종합해서 아래처럼 구성한다고 생각하면돼.

//클래스 A를 생성
class A {
	private int result1;
	public int add(int x, int y) { //메소드 생성
		result1 = x + y;
		return result1;
	}
	public int subtraction(int x, int y) {
		result1 = x - y;
		return result1;
	}
}

//클래스 A로부터 상속받아 클래스 B를 생성.
//클래스 B는 A로 부터 상속되어 A메소드를 사용할 수 있음
class B extends A {
	private int result2;
	public int multi(int x, int y) {
		result2 = x * y;
		return result2;
	}
	public int divide(int x, int y) {
		result2 = x / y;
		return result2;
	}
}

class TestAB {
	public static void main(String args[]) {
		int temp;

		A object_a = new A();
		B object_b = new B();

		//생성된 객체의 add()메소드를 사용
		temp = object_a.add(10, 20);
		System.out.println(A의 add 수행결과  + temp);

		//object_b 객체는 add() 메소드를 가지고 있지 않지만 
		//상위 클래스를 상속하였으므로 add() 메소드 수행이 가능
		temp = object_b.add(1, 2);
		System.out.println(B의 add 수행결과  + temp);

		temp = object_b.multi(2, 2);
		System.out.println(B의 multi 수행결과  + temp);

		//Error : 
		//object_a 객체는 multi() 메소드를 가지고 있지 않음
		temp = object_a.multi(20, 20);
		System.out.println(A의 multi 수행결과  + temp);
	}
}

Share This Post

Leave a Reply

Your email address will not be published. Required fields are marked *

Latest Post

  • I have been working as an IT freelancer for over 10 years and have had a chance to work with various clients. Working freelance, I
  • CNBC analyzed the minutes of the Berkshire Hathaway shareholders’ meeting to find out why Warren Buffett could be an excellent investor. It is already known,
  • Good timing is like a good choice. So what is ‘good choice’? A good choice is to decide what you need to do first. That
  • We learned that in childhood we should brush our teeth immediately after eating rice. However, this is a common misconception in the days when common
  • In most cases, it is important for novice marketers to work efficiently by reducing the waste of work and increasing focus. He will not used
  • source: vornado.com The circulator is the abbreviated name for ‘air circulator’. The air circulator actually has a different purpose than the fan. Unlike a fan
  • According to Tom Corley, who studied 177 successful millionaires, successful millionaires had a common secret of success. Here are the 10 habits of successful rich
  • The way to go home late at night after a work or dinner. In a dark alley to go home. What if someone follow you
  • In Korea, ‘stalking’ is a very light misdemeanor. However, there are many cruel and terrible cases of stalking that should be classified as violent crime.
  • About 25% of men under 35 visit their ex-girlfriend’s social media profile once a month. Among young women, 20% said they would do this. Stalking