2차 프로젝트를 위해 DB 멘토링을 받으면서 강사분이 객체지향에 대해 야무지게 설명을 해주셔서..

복습 겸 옮겨보고자 한다.

 

 

네이버 IT 용어사전 객체 검색 결과는 다음과 같다.

 

어렵긴 하지만...요약해보면 다음과 같다. 

 

객체란?

개념적인 것들 (사람/동물/사물/주문/예약/감정....등등)을 의미한다.

 

고유한 속성을 가지고 있다.

타인이 알 수 있는 것.

사전에 등록된 명사.

 

고유한 속성이란게 애매모호하면 타인이 알 수 있는 것, 사전에 등록된 명사 둘만을 생각해도 좋다.

 

즉 "asdlkfjasdflkklsdfwe"는 객체가 될 수 없다. 타인도 모르고 사전에도 없기 때문에!

하지만, 속성과 기능이 포함된 객체를 표현하려면 다른 게 필요한데, 이럴때 Class를 사용한다.

클래스는 크게 두 가지로 나눌 수 있다.

 

사용자 정의 클래스(User Defined Class) vs 내장 클래스 (Built-In-Class)

 

이름과 나이를 가지는 학생이란 클래스를 만들어보면 다음과 같다. 

public class Student                             // 클래스 이름
{
   private String name;                          // 속성:Property:멤버필드
   private int age;

   public Student()                              // 생성자 :: 기본생성자
   {
   }
   
   public Student(String name, int age)          // 생성자 1
   {
      this.name = name;
      this.age  = age;
   }
   public void setName(String name)              // 기능:메소드:멤버함수
   {
      this.name = name;
   }
   public String getName()
   {
      return this.name;
   }
   public void setAge(int age)
   {
      this.age = age;
   }
   public String getName()
   {
      return this.name;
   }
}

 

이름과 나이 속성을 필드로 선언을 하고, 두 종류의 생성자를 호출한 모습이다.

 

생성자의 특징 : 클래스 명과 같은 이름을 가지고 반환타입이 없다. 

처음 선언된 생성자에는 매개변수가 없는데, 이는 기본 생성자라고 해서 클래스가 생성될 때(인스턴스화)

자동으로 호출이 되며, 

두 번째 생성자는 전달인자와 속성이 동일하기 때문에 자기 자신을 가르키는 this 키워드를 사용한 것이다. 

 

//객체 인스턴스화 (메모리 할당) 
Student s1 = new Student();

 

객체지향의 기초 요소 4가지

(1) 캡슐화(encapsulation) : 속성과 기능을 클래스 내부에 집어넣는 행위 (변수와 함수를 하나의 단위로 묶는 것.)
     1.1정보은닉(information hiding)
: private / protected / public (접근자 제한)

     프로그램의 세부 구현을 외부로 드러나지 않도록 모듈 내부에 감추는 것.

 

(2) 상속(inheritance)  : 클래스나 추상 클래스를 상속받는 행위

자식 클래스가 부모 클래스의 속성과 기능을 그대로 물려받는 것.

     2.1 오버로딩 vs 오버라이딩


 (3) 다형성(polymorphism)
: poly = multi, numerous; morph = form

   하나의 변수, 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것을 의미한다.
     (3.1) subtype polymorphism   (서브타입 다형성) - 메소드 오버라이딩
     (3.2) parametric polymorphism (매개변수 다형성) - 제네릭 메소드

     (3.3) ad-hoc polymorphism (임시 다형성) - 함수 오버로딩

     (3.4) coercion polymorphism (강제 다형성) - 묵시적(자동)/명시적(수동) 형변환


 (4) 직렬화(Serializtion) :
네트워크 상에서 전송되는 코드를 바이트 코드 형태로 변환해서 전송의 효율성 높임. 

     (4.1) 역직렬화(Deserializtion) : 전송받은 바이트 코드를 다시 객체화 시키는 작업.

 

 

 

 

 

+ Recent posts