Java

11 [인강] 자바의정석 ch06

Rosie_dev 2020. 12. 18. 10:24

| 클래스변수, 인스턴스변수   //속성

  cv              iv

  객체마다 다르게 유지되어야 함 iv

  모든 객체공통 cv      //static+

  Card c = new Card();

  c.kind = "HEART";     //iv

  c.number = 5;

  Card.width = 200;    //cv  클래스이름을 앞에, 참조변수도 작동은 함

  Card.height = 300;

  *flash동영상 MemberVar  따라서 그려보기


| 메서드란? 메서드의 선언부와 구현부

  메서드 { } - 작업단위

  코드의 중복은 제거필요, 관리쉬움, 재사용, 간결

  메서드는 클래스 안에 있어야 하고, 함수는 독립적

  한 가지 기능만 수행하도록 작성하는게 좋음

  int add (int a, int b)   //선언부, 반환타입 int

  {                                        //구현부

       int result = a + b;

       return result;

  }

  반환할 것이 없을 때, 반환타입 void

  //매개변수 a, b && result → 지역변수 lv

    이름이 겹쳐도 상관없음, 매서드 내에서만 적용되므로


| 매서드의 호출, 매서드의 실행흐름

  호출: 매서드이름( );   //void print99danAll( ) 호출시

         int result = add (3, 5);

 


  class MyMath { 

         long add (long a, long b) {                                       //(1)

                long result = a + b;

                return result;

        }

 

        long add(long a, long b) { return a + b; }                    //(2)

  //(1)과 (2) 표현이 동일한 값

 

  a > b ? a : b;       

  //a>b이면, a 반환, 아니면 b

  //간단하게 if-else 구문 대신 사용, 삼항연산자

 

  //값을 저장하는 변수(result)없이도 호출가능하나 주소에 저장하지 못함, 호출만 가능

 

  1. 객체생성

  2. 메서드 호출

  3. 매서드 모든 문장 실행되거나, return문에서 호출 메서드로 돌아가서 이후 문장들을 실행


| return문, 반환값

  void printGugudan(int dan) {

         if(!(2 <= dan && dan <= 9))

             return;

         for(int i=1; i<=9; i++) {

             System.out.printf( "%d * %d = %d%n", dan, i, dan*i );

         return;    //반환타입이 void이므로 생략가능. 컴파일러가 자동추가

   }

   //그 외의 경우, 참/거짓 모두의 return문 작성필요

   //반환타입도 일치시켜야 함


| 호출스택 call stack

  싱글쓰레드에서는 하나의 메서드만 실행중이고, 다른 것은 대기

  //단계별로 그려보기


| 기본형 매개변수

  기본형 매개변수 - 변수의 값을 읽기만 할 수 있다

  참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다

  *flash동영상 PrimitiveParam, ReferenceParam  

  public static void main(String[] args) {

           Date d = new Date();

           d.x = 10;       //참조변수 d가 가리키는 x값이 10이다

           System.out.println("main() : x =" +d.x);

           change(d.x);

            System.out.println("After change(d.x)");

            System.out.println("main() : x =" +d.x);

   }

  static void change(int x) {

          x = 1000;

          System.out.println("change() : x =" +x);

  }

  //change의 x와 Date의 x 값이 다르다


| 참조형 매개변수

  public static void main(String[] args) {

           Date2 d = new Date2();

           d.x = 10;      

           System.out.println("main() : x =" +d.x);

           change(d.x);

            System.out.println("After change(d.x)");

            System.out.println("main() : x =" +d.x);

   }

  static void change(Date2 d) {    //참조형 매개변수, main메서드의 지역변수 d값을 change에 복사

          d.x = 1000;

          System.out.println("change() : x =" +d.x);

  } 


 

 참조형 반환타입

  public static void main(String[] args) {

           Data3 d = new Data3();

           d.x = 10;      

           Data3 d2 = copy(d);   //참조변수 없어도 된다, static메서드이기 때문

           System.out.println("d.x ="+d.x);

           System.out.println("d2.x"+d2.x);

   }

  static Data3 copy(Data3 d) {

          Data3 tmp = new Data3();    

          tmp.x = d.x;

          return tmp;   //참조형 tmp 객체의 주소를 반환

  }

  //객체의 주소를 주고받음 

  *그림 그려보기


| static 메서드와 인스턴트 메서드

  1. static 메서드 = 클래스 메서드

     객체생성 없이 '클래스 이름.메서드이름()'으로 호출

     메서드 내 인스턴스 변수(iv) 사용불가

     Math.ramdom( ), Math.round( )

  2. 인스턴트 메서드

     인스턴스 생성 후, '참조변수.메서드이름()'으로 호출

     메서드 내 인스턴스 변수 사용가능

     iv, im


  class MyMath2 {

         long a, b;                    //iv 인스턴스 변수, iv

         long add ( ) {               //인스턴스 메서드, iv 사용으로 매개변수 없음

                return a + b;

         }

         static long add(long a, long b) {        //클래스 메서드(static 메서드), 매개변수, lv

                 return a + b;

         }

  }

  

  System.out.println(MyMath2.add(200L, 100L);    //클래스 메서드 호출, 객체(iv묶음)가 필요없음

 

  MyMath2 mm = new MyMath2 ( );               //인스턴스 메서드 호출, 객체생성 필요

  mm.a = 200;

  mm.b = 100;

  System.out.println(mm.add( ));


  static
  1. 공통 속성에 붙인다
  2. 인스턴스 멤버를 사용하지 않는 메서드에 붙인다

'Java' 카테고리의 다른 글

13 [인강] 자바의정석 ch07  (0) 2020.12.21
12 [인강] 자바의정석 ch06  (0) 2020.12.21
10 [인강] 자바의정석 ch06  (0) 2020.12.17
9 [인강] 자바의정석 ch05  (0) 2020.12.16
8 [인강] 자바의정석 ch05  (0) 2020.12.16
댓글