Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
관리 메뉴

개발자

[JAVA 3일차]파라미터,생성자/필드값변경/Casting 본문

개발자/JAVA

[JAVA 3일차]파라미터,생성자/필드값변경/Casting

GoGo개발 2022. 8. 15. 01:52

 

파라미터

 

 Member 클래스 인스턴스(객체) 생성하기 및 출력
생성자는 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메소드(하지만 메소드와는 다르다.)이다. 생성자는 인스턴스 변수(필드 값 등)를 초기화 시키는 역할을 한다. 
[출처] [JAVA/자바] 생성자(Constructor)와 초기화|작성자 JOKER

(Member)

1
2
3
4
5
6
7
8
//field, attribute, property, 속성
     String userid;
     String passwd;
     String name;
     int age;
     int point;
     
 
cs

1. 파라미터 없고 리턴타입 있는 메소드 생성하기(Member)

1
2
3
4
5
6
7
8
9
10
11
12
//mothod, function, 기능, 행위
     //파라미터는 없고 리턴타입이 있는 메소드 생성해보기
     String showInfo()
     {
          return "====" +  this.name + "님======\n" //this는 지금은 써도그만 안써도 그만
                     + "1. 아이디 :"+ this.userid +"\n"
                     + "2. 비밀번호 : "+ this.passwd +"\n"
                     + "3. 성명 : "+ name +"\n"
                     + "4. 나이 : " +age + "\n"
                     + "5. 포인트 : "+ point +"\n";
                     
                  }
cs

1-1.파라미터 없는 기본생성자로 객체 생성하기(Main)

1
2
3
4
5
6
7
//기본생성자로 Member 클래스 인스턴스(객체) 생성하기 
        Member hongMbr = new Member();
        hongMbr.userid = "hongkd";
        hongMbr.passwd = "abcd";
        hongMbr.name = "홍길동";
        hongMbr.age = 30;
        hongMbr.point = 100;
cs

 

출력(Main)

1
System.out.println(hongMbr.showInfo());
cs

 

2. 파라미터 있는 생성자(Member)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 // *** 생성자(constructor) 및 생성자 오버로딩(Overloading) *** //
     //기본생성자는 생략되어있다.
     //그런데 아래와 같이 파라미터(parameter)가 있는 생성자(constructor)를 만들어 주면 생략 되어져있던 기본생성자는 삭제가 되어져 버린다.
     //그래서 기본 생성자가 필요할 경우 반드시 아래처럼 기본생성자를 만들어줘야한다.
    
      // 기본 생성자(constructor)
         public Member() {
         }
     
     // 소괄호() 속에 있는 String userid 이러한 것을 파라미터(parameter) == 아규먼트(argument) == 인자 == 인수  
     // 파라미터(parameter)가 있는 생성자(constructor)
     public Member(String userid, String passwd, String name, int age, int point) {
         // 지역변수명과 멤버변수(인스턴스변수 와 static 변수를 모두 지칭하는 것)명이 
         // 일치할 경우에는 지역변수가 우선된다. 
         // 이럴경우 지역변수와 멤버변수를 구분을 지어주어야 한다. 
         // 이때 사용하는 것이 this 이다.
         // this 는 해당 클래스(지금은 Member 클래스)로 생성되어진 instance(인스턴스)를 가리키는 대명사이다.
         // 그래서 this.필드명을 사용하면 바로 멤버변수를 가리키는 것이다.
         this.userid = userid; //지역변수 됐다.this 붙여서 인스턴스 구분해주기
         this.passwd = passwd;
         this.name = name;
         this.age = age;
         this.point = point;
     } 
cs

 

2-1 파라미터 있는 기본생성자로 객체 생성하기(Main)

1
2
3
 //파라미터가 있는 기본생성자로 Member 클래스 인스턴스(객체) 생성하기
 
        Member hanskMbr = new Member("hansk","1234","한석규",26,200);
        
cs

 

출력 및 결과값(Main)

1
2
3
4
5
6
7
8
9
        System.out.println(hanskMbr.showInfo());
        /*
         ==== 한석규님 ====
         1. 아이디 : hansk
         2. 비밀번호 : 1234
         3. 성명 : 한석규 
         4. 나이 : 26
         5. 포인트 : 200
         
cs

 

인스턴스의 필드값 변경하기(인스턴스 변수 바꾸기)

 

1. 파라미터가 있고 리턴타입이 void인 메소드 생성(member)

1
2
3
4
5
6
7
//파라미터가 있고 리턴타입이 void 인 메소드 생성하기
     void updateInfo(String passwd, String name, int age, int point) {
        this.passwd = passwd;
        this.name = name;
        this.age = age;
        this.point = point;
     }     
cs

 

출력 및 결과 

1
2
3
4
5
6
7
8
9
10
11
12
hongMbr.updateInfo("0987abcd","Hong kildong"27150);
        
        System.out.println(hongMbr.showInfo());
        /*
         ==== HongKildong님 ====
         1. 아이디 : hongkd
         2. 비밀번호 : 0987abcd
         3. 성명 : Hong Kildong 
         4. 나이 : 27세
         5. 포인트 : 150 point
         
         */
cs

변경은 uadateInfo메소드로  해주고 

출력은 ShowInfo 메소드로 해준다

 

실행종료시각 추가해서 메소드 생성

1.return 값 있는 메소드(member)

 

1
2
3
4
5
 String showInfo_2()
     {
        
      return showInfo() + " 6. 실행종료시각 :" + MyUtil.currentTime() +"\n";
     } 
cs

 

출력 및 결과<Main>

 

1
2
3
4
5
6
7
8
9
10
11
12
System.out.println(hongMbr.showInfo_2());// 지금은 string 으로 void 일때는 hongMbr.showInfo_2();
         /*
         ==== HongKildong님 ====
         1. 아이디 : hongkd
         2. 비밀번호 : 0987abcd
         3. 성명 : Hong Kildong 
         4. 나이 : 27세
         5. 포인트 : 150 point
         6. 실행종료시각 : 2022-06-02 15:35:40
         */
cs

 

2.void 형식의 메소드

 

1
2
3
4
void showInfo_3()
     {
         System.out.println(showInfo() + " 6. 실행종료시각 :" + MyUtil.currentTime() +"\n");
     }
cs

 

출력 및 결과

 

1
2
3
4
5
6
7
8
9
 hanskMbr.showInfo_3(); //void 일때
         
        /* ==== hansk님 ====
         1. 아이디 : hansk
         2. 비밀번호 : asdf0070
         3. 성명 : 석규한 
         4. 나이 : 50세
         5. 포인트 : 700 point
         6. 실행종료시각 : 2022-06-02 15:35:40
cs

 

파라미터 이해해보기 

1.파라미터 있는 메소드 생성하기<Member>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sum_1(int a,int b) {
         System.out.println(a+"+"+b+"="+(a+b) +"입니다.");
        //10+20+30입니다. (a+b)에서 괄호를 빼버리면 문자열 결합이 된다.
         
     }
     String sum_2(int a, int b) {
         
         return a+"+"+b+"="+(a+b);
          //10+20+30     
     }
     
     int sum_3(int a,int b) {
     
          return a+b;
          
          //int sum_3(double a,int b)      이 형태는 오류 int는 실수 표현안되니까
          //   return a+b;                 int sum_3에서 sum을 double 로바꾸면 자동 형변환 된다.
     }
cs

 

출력 및 결과<Main>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
hanskMbr.sum_1(10,20);
         ////10+20+30입니다.
         
         String str =  hanskMbr.sum_2(10,20);
         System.out.println(str);
         //10+20=30
         System.out.println(hanskMbr.sum_2(10,20));
         //같은거라 굳이 str에 담을 필요없다
         
         int n = hanskMbr.sum_3(10,20);
         System.out.println(n);
         //30
         System.out.println(hanskMbr.sum_3(12)); // 내가 짠거
        //3
cs

 

casting(캐스팅)

 

<데이터형 변환하기 >

 1. 자동 형변환(묵시적 형변환)
  : 데이터타입의 크기가 작은 것에서 크기가 큰쪽으로는 자동적으로 형변환이 발생된다. 

   byte(1byte) --> short(2byte) --> int(4byte) --> long(8byte)
       개미              병아리            강아지           사람   
      개미집              병아리집          강아지집          안방
   
   float(4byte) --> double(8byte) 
  :정수타입은 실수타입으로 자동형변환이 발생한다.
   
   char(2byte)
   : char타입은 int형으로 자동형변환이 발생한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
char ch = 'a';
        System.out.println("ch => " + ch); // ch => a
        System.out.println(ch+1);          // (int)ch + 1 ==> (int)'a' + 1==> 97 + 1 ==>98 
        System.out.println((char)(ch-32));         // 'A'
        
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        
     //    Character chr = new Character('a'); 
     //  또는    
        Character chr = 'a';
        System.out.println("chr =>" + chr); // chr -> a
        System.out.println(chr + 1); // (int) chr + 1 ==> (int)'a' + 1 =>97 + 1 =>98 
        System.out.println((char)(chr - 32)); // A
        System.out.println((char)('a'-32));   // A
cs


  2. 강제 형변환(casting)
  : 데이터타입의 크기가 큰것을 작은것으로 강제적으로 형변환 시키는 것을 말한다.
     크기가작은타입 = (크기가작은타입)크기가큰타입
               
  2-2. 실수를 정수로 강제적으로 형변환하는 것을 말한다.
         소수부는 무조건 절삭을 해버리고 정수만 나온다.
         : 정수 = (정수)실수         

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// 1. 자동 형변환(묵시적 형변환)
        byte no1 = 100// byte => 1byte   -128 ~127
        
        short sh = no1; // short => 2byte -32,768 ~ 32,767
        
        //위의 것은 short sh = (short)no1; 을 되는 것이다. 쇼트로 변한것임 자동적으로 
        
        System.out.println("sh => " + sh);
        //sh => 100
        
        int in = sh; // int => 4byte -2,147,483,648 ~ 2,147,483,647
        // 위의 것은 int in = (int) sh; 을 되는 것이다.
        
        System.out.println("in =>" + in);
        //in =>100
        
        long ln = in// long => 8byte -9,223,372,036,854,775,808 ~  9,223,372,036,854,775,807
        // 위의 것은 long in = (long) in; 을 되는 것이다.
        
        System.out.println("ln=>" + ln); 
        //In => 100
        
        float ft =1.234F;
        System.out.println("ft =>" + ft); //float 단정밀도 소수점 이하 7자리까지 표현됨.
        // ft =>1.234
        
       double db =ft; // double 배정밀도 소수점 이하 15~16자리까지 표현됨.
       // 위의 것은 double db= (double)ft; 
       System.out.println("db =>" + db);
       // db => 1.2339999675750732
       
       float ft4 = (float)db; //이건 내가 그냥 해본 코딩 강제 형변환
               System.out.println("ft4=>" + ft4);
       
       
       System.out.println("\n~~~~~~~~ 강제형변환 ~~~~~~~~\n");
       
       double db2 = 1.23456789;
       System.out.println("db =>" + db2);
       //db2 => 1.234556789
       
       float ft2 = (float)db2;
       System.out.println("ft2 =>" +  ft2);
       //ft => 1.2345679 반올림
       
       int in2 = 40000;
       System.out.println("in2 => " + in2);
       // in2 => 30000 40,000으로 바꿈
       
       short sh2 = (short)in2;
       System.out.println("sh2 => " + sh2);  
       // sh2 => -25536 이상한 값이 나옴. short는 -32,768 ~ 32,767 까지만 표현할 수 있기 때문이다.
       
      int in3 = 30000;
      short sh3 = (short)in3;
      System.out.println("sh3 => " + sh3); 
      // sh => 30000
      
      
      long ln2 = 3000000000L; // long 8byte 
      float ft3 = ln2;         // float 4byte
      // 위의 것은 float ft3 = (float)ln2; 으로 자동형변환 된다. -> 실수로 , 실수가 더 크니까
      System.out.println("ln2 =>" + ln2);
      // ln2 => 3000000000          
              
      System.out.println("ft3 =>" + ft3);
      // ft3 => 3.0E9 은 3.0 * 10의 9승이다.
      
      double db3 = 123.98765;
      int in4 = (int)db3;
      System.out.println("db3 => " + db3); // 실수를 정수로 강제형변환 하면 소수부를 잘라버리는 절삭의 효과를 가진다.
      // db3 =>db3 => 123.98765
      
      System.out.println("in4 => " + in4);
      // in4 => 123
cs