본문 바로가기

IT自主学習 (2023.05.23~)/Java(2023.05.23~)

プログラミング自主学習 39日目 Enum/Object

Enum

データーの中には限定された値を持っていうデータがある。例えば、曜日は月~日まで7つの値を、季節は4つの値を持っている。このように限定された値をもっているデータタイプを列挙型(Enumeration type)という。

ヒープ領域にメモリが保存される参照型データーでもある。

 

ex> public enum Season {
     SPRING,
     SUMMER,
     AUTUMN,
     WINTER
}

 

 

列挙タイプSeasonの列挙定数(Enumeration Constant)は、SPRINGからWINTERまで4つだ。

列挙定数は慣習的に大文字で表記する。

 

シングルトーン(一つのインスタンス)とも活用される。

時間の問題上、実習時の例題をアップロードする。翻訳はされていない。

 

package ch05.sec12;

 

import java.util.Calendar;

 

public class WeekExample {

public static void main(String[] args) {

 

Week whatDayisToday = null; //Week의 7개의 열거상수 중 하나를 담는 열거 Week의 열거형 변수 today를 작성한다. 아직은 참조값(상수의 어드레스)는 미정이다.

 

Calendar cal = Calendar.getInstance(); //Calendar의 인스턴스를 생성하고 Calendar형 변수 cal에 인스턴스의 참조주소를 대입한다.

 

int dayNumber = cal.get(Calendar.DAY_OF_WEEK); // 변수 cal은 Calendar의 인스턴스를 참조하므로 Calendar 클래스의 멤버변수와 메소드를 이용가능하다.

//Calendar의 Day of week은 요일을 숫자라 환산하므로 그 값을 int형 정수에 담는다.

 

switch(dayNumber) { //담는 변수에 따라 정해진 값을 리턴하기 위해, 변수별로 리턴할 값을 담는다. Switch-case를 사용한다.

case 1: whatDayisToday = Week.SUNDAY; break;

case 2: whatDayisToday = Week.MONDAY; break;

case 3: whatDayisToday = Week.TUESDAY; break;

case 4: whatDayisToday = Week.WEDNESDAY; break;

case 5: whatDayisToday = Week.THURSDAY; break;

case 6: whatDayisToday = Week.FRIDAY; break;

case 7: whatDayisToday = Week.SATURDAY; break;

 

}

if(whatDayisToday == Week.SUNDAY) {

System.out.println("일요일에는 축구를 합니다.");

}else {

System.out.println("열심히 자바를 공부합니다.");

}

}

}

 

 

Object(オブジェクト)

オブジェクトは、物理的に存在し、他のものと認識して区別できるものだ。

自動車というのは車、エンジンなどの共通的な何からの典型的な概念としても存在するが、様々な色や種類があり、分特徴によって分けられる。トラック、バス、スポーツカーなど色々なものがあるように、区別ができるためだ。

 

人間も同じだ。人間という概念は共通認識でもあるが、黒人、白人など人間でありながらも様々な個性があるため、オブジェクトだ。

 

こういったオブジェクトはオブジェクト特有の状態(statement)と行動(behavior)をもっている。

プログラミングではこれを属性(field)と行動(method)と呼ぶ。

また、現実のすべての現状もオブジェクトとオブジェクトの相互作用に成り立っている。

 

例えば、人間が計算機が何かを計算する際すら、計算機の足し算機能を利用し、

計算機はその結果をリターンする。

 

このような相互作用の手段をモソッドと呼び、オブジェクトが他のオブジェクトの機能を使用することを

メソッドを呼び出す(call)という。

 

・メソッドの基本的な形はメソッド名(引数)だ。

格好の中に実際の引数を入れる。直接入れる数が実引数(argument)であり、

入れる前の仮想ンプレートを仮引数(parameter)という。

 

例)add(int x, int y)    int x, int yはparameter 

       add(10,20)    -> 10+20 ->  return 30    10,20はargument

 

 

メソッドは引数を必要なメソッドと必要ではないものがある。

例)getInstance();

 

OOTの特徴

・カプセル化

オブジェクトのデータ(field)と動作(メソッド)を一つに組み、実際の具現内容を外部に隠すことだ。

外部のオブジェクトは内部のオブジェクトの仕組みが分からず、オブジェクトが提供するfieldとmethodのみ利用できる。

 

カプセル化する理由は、外部からのアクセルよりオブジェクトが損なうことが防ぐためだ。

そのため、接近修飾子(access modifier)を使用する。

 

・継承

スーパークラスのフィールドとメソッドを使用できる。

メリット 

1)コードの再使用性 

2)効率(スーパクラスを修正することでサブクラスは修正が要らない)

 

・多態性/多形性