Chapter 4 클래스 -복습

Chapter 4 클래스

오늘 강의는 클래스에 관해서 공부했다.

우선 내가 아는 클래스란 객체를 생성하기위해 가장 먼저 작성하여야 되는 것으로 무언가를 만들어 내는 일종에

틀과 같은 개념이다. 따라서 자바에 있어서 클래스의 개념을 이해하지 못한다면 자바를 시작할수 없는것과 같다고

생각된다. 오늘 수업은 클래스의 구조와 선언 , 객체생성, 멤버 변수에 대해서 배웠는데 수업 시간 바로 바로 이해하기가

쉽지 않았다. 먼저 이해가 되지 않았던 부분은 우리는 여지껏 간단한 프로그래밍 예제로 객체를 생성하는 과정을 생략했다.

public static void main(String agrs[])를 써줌으로써 따로 객체를 생성하지 않고 프로그래밍 할수 있었다.

그런데 갑자기 객체생성이라는 과정을 하게 되니 혼돈이 생겼다. 객체생성을 써줘야 되는 경우와 생략하는 경우가

따로 있는 것일까?라는 의문이 생겼다. 아직 객체의 개념과 클래스의 개념을 정확히 이해하지 못한거 같다.

다시한번 앞장을 돌이켜 보았는데 클래스로부터 객체를 생성하는데 그렇다면 앞서 객체생성을 따로 해주지 않은 이유는

자바내에 공통적으로 사용할수 있는 객체를 제공하는 것일까 하는 생각도 들었다. 좀더 객체의 의미를 더 공부해야될거 같다.

교수님께서 항상 말씸하시길 프로그래밍은 계속 이어나가는 것이라 그때 그때 이해 해야 다음으로 넘어 갈수 있다고 하셨는데

문득 그말씀이 떠올랐다. 그래서 예습 복습을 철저히 하라고 하신게 아닌가 싶다. 여지껏 나의 게으름으로 많이 뒤쳐졌지만

돌이킬 수 없으니 앞으로 배는 노력해야겠다. 

또 한가지 이해가 안되었던 부분이 객체 참조 변수 부분이었는데 속성변수의 값을 정해주고 참조변수로 할당한후

몇가지 속성변수 값만 바꾸어 실행했었는데 바꾸었던 값이 적용되어 두 출력 값이 다르게 나왔었다.

물론 우리가 생각한 대로의 값이 나온거지만 어떻게 객체를 따로 생성하지 않고 위의 객체를 그대로 사용하고

일부 부분만 바꾼 값으로 선언하였는데 바꾼 값만 적용하여 우리가 요구하는 출력이 나왔는지 이해가 안되었다.

내가 정확히 개념을 이해못하여 당연한 것을 생각지 못하는지도 모르겠다.

앞으로 좀더 수업에 열중하여 듣고 복습 예습을 철저히 해야 겠다.

by 황유동 | 2008/10/07 23:08 | 트랙백 | 덧글(2)

자바블로그chapter2복습

CHAPTER 2 객체지향개념


 이번 챕터에서는 자바 언어 즉 객체지향 언어(Object-Oriented Language)의 핵심개념들에 대해서 수업받았다.
객체, 클래스, 상속, 캡슐화, 메시지, 다형성의 개념들을 이해하고 자바에서 어떻게 사용되는데 알아보는데 목표가
있었다. 항상 개념이라고 하면 왠지 꺼려지고 어렵게 느껴지는 나로서는 수업내 긴장에 될 수 밖에 없었다.더욱이
프로그래밍엔 전혀 무지한지라 들으면서 내내 이해하려고 노렸했다. 교수님의 예제 설명과 실습을 하면서 보니
이해가 가는듯 했으나 집에서 이렇게 혼자 다시 보니 영 쉽진 않았다.

 일단 자바는 객체지향언어로서 그 장점을 나열하면
 첫쨰, 문제를 쉽고 자연스럽게 모델링 할수 있다.
 둘째, 쉬운 개발로 인한 생산성 향상
 셋째, 프로그램모듈의 재사용
 넷째, 프로그램의 확장 및 보수 용이
이렇게 들수 있다. 

우선 객체(Object)라는 개념은 쉽게 말해 실세계의 존재하는 단위를 소프트웨어적으로 표현한 것으로 주위에 모든 유무형존재들이 객체가 될수 있는 것이다.이 객체는 클래스(Class)로부터 생성 되는데 클래스란 여러 객체를 생성하기 위한 틀과 같은 개념이다. 예를 들어 붕어빵에 비교하면 붕어빵을 만드는 틀은 클래스가 되고 만들어는 붕어빵은 객체가 되며 그걸 먹는 과정은 데이터 처리라고 할수 있다. 하지만 교수님은 이해하기 쉽게 붕어빵으로 설명해 주셨지만 클래스의 개념은 그것보다 좀 더 큰 개념이라고 하셨다. 붕어빵의 틀은 모양을 만들어내지만 여기 안에 들어가는 단팥등의 것들은 알 수가 없다. 즉 클래스의 개념은 객체 생성을 위한 설계도로서 클래스만 보아도 알수 있어야 된다고 하셨다. 
 객체는 비슷하나 속성이나 메소드가 약간 다른 객체를 생성하려 할때 기존의 클래스에 속성과 메소드를 추가하여 새로운 클래스로 만드는 것이 상속(Inheritance)이라는 개념이다. 쉽게 비교하자면 우리가 흔히 말하는 유산상속이라는 개념과 비슷할거 같다.그리고 이 상속은 하나의 클래스로부터만 상속되는게 아니라 여러개의 클래스로부터 상속받아 새로운 클래스를 만들수 있으니 복잡한 프로그래밍을 좀더 편하게 할 수 있는 아주 유용한 개념같다.
 캡슐화(Encapsulation)의 개념은 아직 정확히 이해가 안되는데 객체의 사용자로부터 정보를 은폐하는 개념이라는데 아무리 봐도 잘 와닿지 않는다. 이 부분에 대해서는 좀더 알아봐야겠다.
 메시지
(Massage) 객체들에게 일을 시키는 행위인데 매시지엔 수신객체의 이름, 메소드이름, 메소드의 수행에 필요한
인자들이 포함된다. 또한 클래스는 계층 구조로 이루어져있는데 메세지는 해당 메소드를 탐색하여 호출하여 수행한다.만약 해당 메소드가 상위계층까지 발생되지 않는다면 오류가 나는 것이다.
 마지막으로 객체지향의 중요한 개념으로서 다형성
(Polymorphism)이 있다.
 이 다형성을 정의하자면 "서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할수 있는 기능"이라 한다.설명하자면 타원 삼각형 사각형이라는 서로다른 객체에게 draw()라는 동일한 메시지를 보내면 하위클래스에서 상속받은 추상 메소드를 서로 다른 방법으로 구현 되는 것이다.타원을 그린다, 사각형을 그린다, 삼각형을 그린다.이런식으로 말이다. 정리하면서 복습하는데도 여간 쉽진 않다. 이 개념들이 자바언어상에 어떻게 나오는지 본문37 그림2-12를 실행해보았다.

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;
 }
 }
 class B extends A //클래스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;
 }
 }
 public class TestAB {
 public static void main(String arg[]) {
 int temp;
 A objecta = new A();
//객체생성
 B objectb = new B();
 temp = objecta.add(10,20);
//메세지
 System.out.println("A 의 add 수행결과" + temp);
 temp = objectb.add(1,2);
 System.out.println("B 의 add 수행결과" + temp);
 temp = objectb.multi(2,2);
 System.out.println("B의 multi 수행결과" + temp);
 
 
temp = objecta.multi(20,20);
 System.out.println("A의 multi 수행결과" + temp);
//메소드가 없어 오류발생하여 지우고 실행해보니 출력가능
 }
 } 

출력 결과
A의 add 수행결과 30
B의 add 수행결과 3
B의 multi 수행결과 4
이렇게 나왔다. 책을 보면서 해보긴 해보았는데 아직 어떻게 되서 이런 출력 결과는 나오는지 정확히 이해하진 못했다.
오늘 수업 시작전 교수님의 말씀 처럼 처지면 따라잡기 어려운 프로그래밍을 정신 바짝 차리고 예습 복습 철절히 해야겠다! 교수님 앞으로 열심히 하겠습니다. 처음 써보는 거라 정리하는게 장황하게 되버렸는데 읽어주셔서 감사합니다.

by 황유동 | 2008/09/09 22:49 | 덧글(1)

◀ 이전 페이지          다음 페이지 ▶