728x90
반응형

설정자와 접근자

설정자(mutator)

 - 필드의 값을 설정하는 메서드

 - setXXX () 형식


접근자(accessor)

 - 필드의 값을 반환하는 메서드

 - getXXX () 형식


※설정자와 접근자 메소드를 통하여 멤버변수에 접근한다.


<설정자와 접근자>




설정자와 접근자를 사용하는 이유

- 클래스에서 선언된 private 변수는 다른 클래스에서 접근할 수 없기 때문에, 접근하기 위한 메서드(설정자와 접근자)를 public으로 선언하여 사용하는 것 이다.

- 설정자에서 매개변수를 통하여 잘못된 값이 넘어오는 경우, 사전에 차단할 수 있다.

- 필요할 때마다 필드값을 계산하여 반환할 수 있다.

     public void setSpeed(int s) {

               if ( s < 0 )        <------ 속도가 음수이면 0으로 만든다.

                     speed = 0;

               else

                     speed = s;

     } 



문자열 객체

 자바에서 문자열은 객체이다.

 클래스에서 문자열 객체를 생성하는 방법

  -> String s = new String("Hello World!");

 문자열 객체의 메서드 호출하는 방법

  -> String s = new String("Hello World!");

       int size = s.length();  //size는 12가된다.

String 클래스의 메서드

 char :: charAt(int index)  -> 지정된 인덱스에 있는 문자를 반환한다.

 int :: compareTo(String anotherString)  -> 사전적 순서로 문자열을 비교한다. 앞에 있으면 -1, 같으면 0, 뒤에있으면 1이 반환된다.

 String :: concat(String str)  -> 주어진 문자열을 현재의 문자열 뒤에붙인다.

 boolean :: equals(Object anObject)  -> 주어진 객체와 현재의 문자열을 비교한다.

 boolean :: equalsIgnoreCase(String anotherString)  -> 대소문자를 무시하고 비교한다.

 boolean :: inEmpty()  -> length()가 0이면 true를 반환한다.

 int :: length()  -> 현재 문자열의 길이를 반환한다.

 String :: replace(char oldChar, char newChar)  -> 주어진 문자열에서 oldChar를 newChar로 변경한, 새로운 문자열을 생성하여 반환한다.

 String :: substring(int beginIndex, int endIndex)  -> 현재 문자열의 일부를 반환한다.

 String :: toLowerCase()  -> 문자열의 문자들을 모두 소문자로 변경한다.

 String :: toUpperCase()  -> 문자열의 문자들을 모두 대문자로 변경한다.


728x90
반응형
728x90
반응형

메서드(method)

 - 작업을 수행하기 위한 명령문의 집합(※ C와 C++에서 함수와 같은 의미)

 - 어떤 값을 입력받아서 처리하고 그 결과를 돌려준다.

    (입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.)


메서드의 장점과 작성방법

 - 반복적인 코드를 줄이고 코드의 관리가 용이하다.

 - 반복적으로 수행되는 여러 문장을 메서드로 작성한다.

 - 하나의 메서드는 한 가지 기능만 수행하도록 작성하는 것이 좋다.

 - 관련된 여러 문장을 메서드로 작성한다.





인수와 매개변수

인수 :: 메서드 호출시 전달하는 값

매개변수 :: 메서드에서 값을 받을 때 사용하는 변수


메서드의 값 반환

 메서드는 작업의 결과값을 반환할 수 있다.

 반환값은 하나만 가능하다.




<메서드 호출 순서>



메서드의 정의

 메서드를 정의하는 방법 : 클래스 영역에서만 정의할 수 있다.


리턴타입 메서드이름 ( 타입 변수명, 타입 변수명, ...)  ------- 선언부

 {                                                                       ------- 구현부

           //메서드 호출시 수행될 코드

 }

          ↓↓↓↓

 int add (int a, int b)                  ---------선언부

 {                                           ---------구현부

      int result = a+b;

      return result;         

      //호출한 메서드로 결과를 반환한다.

 }          


void power ()      -------반환값이 없는경우 리턴타입 대신 void를 사용한다. 

{

        power = !power;

}



​메서드의 호출

 참소변수.메서드 이름();            //메서드에 선언된 매개변수가 없는 경우

 참조변수.메서드 이름(값1,값2);  //메서드에 선언된 매개변수가 있는 경우



메서드의 종료

 ▶메서드가 정상적으로 종료되는 경우

     -메서드의 블럭 { }의 끝에 도달했을 때

     -메서드의 블럭 { }을 수행 도중 return문을 만났을 때

▶return문

    -현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아간다.

       1.반환값이 없는 경우 - return문만 써주면 된다.

                return ;

       2.반환값이 있는 경우 - return문 뒤에 반환값을 지정해 주어야 한다.

                return 반환값;


return문

▶반환값이 있는 메서드는 모든 경우에 return문이 있어야 한다.

▶return문의 개수는 최소화 하는것이 좋다.




<메서드의 호출>




중복 메서드

 메서드 호출시 매개변수를 보고 일치하는 메서드가 호출된다.

만약 square(3.14)와 같이 호출되면 컴파일러는 매개변수의 개수, 타입, 순서 등을 판단하여 두번째 메서드를 호출한다.



<중복메서드>

728x90
반응형
728x90
반응형

변수의 종류

 선언 위치에 따른 변수의 종류 : 변수의 선언 위치가 변수의 종류와 범위를 결정한다.


 ▶인스턴스 변수

   - 각 객체의개별적인 저장 공간, 객체마다 다른 값 저장 가능

   - 객체(인스턴스) 생성 후, '참조변수.인스턴스변수명'으로 접근

   - 객체를 생성할 때 생성되고, 참조변수가 없을 때 가비지컬렉터에 의해 자동으로 제거된다.


▶클래스 변수

   - 같은 클래스의 모든 인스턴스들이 공유하는 변수

   - 인스턴스 생성없이 '클래스이름.클래스변수명'으로 접근

   - 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸


▶지역 변수

   - 메서드(함수) 내에 선언되며, 메서드의 종료와 함께 소멸

   - 조건문, 반복문의 블럭 { } 내에 선언된 지역변수는 블럭을 벗어나면 소멸

 


클래스 변수와 인스턴스 변수

 인스턴스 변수 :: 객체가 생성될 때마다 생성되므로 객체마다 각각 다른 값을 가진다.

 클래스 변수 :: 모든 객체가 하나의 저장공간을 공유하므로 항상 공통된 값을 가진다.


인스턴스 변수(필드)의 선언

 public  int  speed;

public -> 접근지정자; private이나 public

int -> 필드의 타입

speed -> 필드의 이름


접근지정자(접근제어자) :: 어떤 클래스가 변수에 접근할 수 있는지를 표시한다.

public :: 모든 클래스로부터 접근이 가능하다.

private :: 클래스 내부에서만 접근이 가능하다.


<인스턴스 변수의 사용범위>

 인스턴스 변수는 선언 위치에 상관없이 클래스안의 어디서나 사용이 가능하다.




<클래스 변수와 인스턴스 변수>




지역 변수

 메서드(함수) 안에 선언하는 변수

public class Box {

  int width=0,length=0,height=0;  //인스턴스 변수(클래스에서 사용가능)

 

  public int getVol()

  {

      int vloume;    //지열 변수(getVol()안에서만 사용가능)

      volume=width*length*height;

      return volume;

   }


  volume=500;   //오류발생

}


지역 변수 사용시 주의점

 지역변수를 초기화하지 않고 사용하면 컴파일 오류 발생한다.

 오류 메세지: The local variable sum may not have been initialized

public class Bug {

   public int getSum()

   {

        int sum;

        for(int i=0; i<10; i++)

             sum=sum+i;  //오류발생

        return sum;  //오류발생

   }

}

728x90
반응형
728x90
반응형

클래스(class)와 객체(object)


클래스 :: 객체를 정의해 놓은 것으로 객체를 생성하는데 사용된다.

객체 :: 실제로 존재하는 사물 또는 개념으로 객체의 속성과 기능에 따라 다르다.

-> 클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통해서 제품을 만드는 이유와 같다.

설계도만 잘 만들어 놓으면 제품을 만들때마다 매번 고민할 필요없이 설계도에서 정해진 규칙대로만 만들면 된다.

마찬가지로 클래스 하나만 잘 만들어 놓으면 많은 수의 객체를 만드는 것도 고민없이 간단히 처리할 수 있다.

-> 객체는 서로 독립적이다. 같은 클래스로부터 생성된 객체일지라도 서로 독립적이어서 한 객체의 변화가 다른 객체에 영향을 주지 않는

         클래스             객체

       제품 설계도        제품

        TV 설계도          TV

      붕어빵 기계       붕어빵


클래스의 정의

클래스 :: 데이터와 함수의 결합

데이터 저장형태의 발전과정 :: 변수는 하나의 값만 저장 -> 같은 타입의 여러데이터를 저장할 수 있는 배열 도입 -> 타입은 다르지만 서로 관련된 데이터를 하나로 묶어서 저장할 수 있는 구조체 도입 -> 서로 관련된 데이터와 함수를 결합한 클래스 도입

변수 : 하나의 데이터를 저장할 수 있는 공간

배열 : 같은 타입의 여러 데이터를 저장할 수 있는 공간

구조체 : 타입에 관계없이 서로 관련된 데이터들을 저장할 수 있는 공간

클래스 : 데이터와 함수의 결합(구조체+합수)



클래스(class) :: 객체를 만드는 설계도. 클래스로부터 만들어지는 각각의 객체를 특별히 그 클래스의 인스턴스(instance)라고도 한다.

객체(object) :: 상태와 동작을 가진다. 객체의 상태는 객체의 특징값(속성) -> 멤버(인스턴스)변수 이다. 객체의 동작은 객체가 취할 수 있는 동작 -> 메서드 이다.



객체의 구성요소 :: 속성(상태)과 기능(동작)으로 이루어져 있다.

객체는 속성과 기능의 집합이며, 속성과 기능을 객체의 멤버라고 한다.

클래스를 정의할 때 속성(상태)은 변수로, 기능(동작)은 메서드로 정의한다.



객체를 생성하는 방법

Car myCar=mew Car();

※자바에서 객체를 생성하는 방법은 new한가지 뿐이다.




객체의 생성과 사용

 <객체의 생성 방법>

   클래스명 변수명;              //객체를 다루기 위한 참조변수 선언

   변수명=new 클래스명();    //객체생성 후, 생성된 객체의 주소를 참조변수에 저장

 예1) TV t;                         //TV타입의 참조변수 t선언

        t=new TV();               //new연산자 사용하여 TV객체 생성

 예2)TV t= new TV();          //한 줄로 줄여서 표현 가능


 new연산자는 인스턴스를 생성할 클래스를 읽어서 인스턴스 생성에 필요한 메모리를 계산한다음, 메모리의 빈 공간을 찾아 객체를 생성하고 생성된 객체의 메모리 주소를 반환한다.

 - 참조변수는 인스턴스를 다룰 수 있는 유일한 방법이기 때문에 참조변수가 없으면 인스턴스를 사용할 수 없다. 사용할 수 없는 인스턴스는 JVM의 가비지컬렉터에 의해서 적절한 시기에 자동적으로 메모리에서 제거된다. 그래서 사용되지 않는 인스턴스를 제거하는데 신경쓰지 않아도 되기 때문에 메모리관리 부담이 없다는 것이 JAVA의 큰 장점이다.

 - 참조변수 t가 TV인스턴스를 참조하고 있다. (t는 TV의 리모콘에 비유)




TV t1 = new TV();     //TV객체를 참조하는 t1변수 선언

TV t2 = new TV();     //TV객체를 참조하는 t2변수 선언

t2 = t1;                     //참조변수 t1의 값을 t2에 저장(복사)

t1.channel=7;

System.out.println(t1.channel);    //7출력

System.out.println(t2.channel);    //7출력

728x90
반응형
728x90
반응형

객체지향 ? 실제 세계를 모델링하여 소프트웨어를 개발하는 방법


절차 지향 프로그래밍(procedural programming) : 문제를 해결하는 절차를 중요하게 생각하는 방법

 - 데이터와 알고리즘이 묶여있지 않다.


객체 지향 프로그래밍(Object-Oriented Programming) : 데이터와 절차를 하나의 덩어리(객체)로 묶어서 생각하는 방법

 - 객체 지향 소프트웨어를 작성하는 것은 컴퓨터 하드웨어 부품을 구입하여서 컴퓨터를 조립하는 것과 비슷하다.

 - 데이터와 알고리즘이 묶여있다.


객체 지향 언어의 특징

 ▶ 기존의 프로그래밍언어와 크게 다르지 않다.

       - 기존의 프로그래밍 언어에 몇가지 규칙을 추가한 것일 뿐이다.

       - 3가지 중요 관점 : 재사용성, 유지보수, 중복의 제거

 

 ▶ 코드의 재사용성이 높다.

       - 클래스를 정의하고 상속이라는 기능을 통해 기존에 작성된 코드를 이용하여 새로운 코드를 쉽게 작성할 수 있다.

 ▶ 코드의 관리가 쉬워졌다.

       - 기존의 절차적 언어에서는 프로그램의 일부를 변경할 때 변경된 코드와 관련된 부분도 일일이 수정해야하지만, 객체지향 언어에서는 코드간의 관계를 맺어줄수 있기 때문에 코드가 변경되면 관련된 코드들도 자동적으로 변경되는것과 같은 결과를 얻을 수 있어서 코드를 관리하는 것이 쉽다.

 ▶ 신뢰성이 높은 프로그램의 개발을 가능하게 한다.

       - 제어자와 메서드를 통해서 중요한 데이터가 외부에서 임의로 변경되는 것으로부터 보호하고, 데이터가 적절하지 않은 값이 되는 것을 말을 수 있다. 예를 들어, 비밀번호와 같이 중요한 데이터를 외부에서 접근하지 못하게 하거나 날짜의 월 데이터가 13월이 되는 것 등을 막을 수 있다.


객체 재향의 3대 특징

-> 캡슐화(encapsulation) :: 관련된 데이터와 알고리즘(코드)이 하나의 묶음으로 정리되어 있는 것

-> 상속(inheritance) :: 이미 작성된 클래스(부모 클래스)를 이어받아서 새로운 클래스(자식 클래스)를 생성하는 기법. 기존의 코드를 재황욜하기 위한 기법.

-> 다형성 :: 하나의 이름(방법)으로 많은 상황에 대처하는 기법. 개념적으로 동일한 작업을 하는 멤버 함수들에 똑같은 이름을 부여 할 수 있으므로 코드가 더 간단해진다.



쉬은 디버깅

 예를 들어서 절차 지향 프로그램에서 하나의 변수를 1000개의 함수가 사용하고 있다고 가정해보자

 -> 하나의 변수를 1000개의 함수에서 변경할 수 있다.

 객체 지향 프로그램에서 100개의 클래스가 있고 클래스당 10개의 메소드를 가정해보자

 -> 하나의 변수를 10의 메소드에서 변경할 수 있다.

728x90
반응형

+ Recent posts