hyeonga_code

Java_31_객체 지향_OOP, 객체 지향 언어, 속성, 객체, 클래스, 멤버 변수, 멤버 메소드, 매개 변수, 본문

Java

Java_31_객체 지향_OOP, 객체 지향 언어, 속성, 객체, 클래스, 멤버 변수, 멤버 메소드, 매개 변수,

hyeonga 2023. 9. 26. 11:59
반응형


    ---------------------알아 두면 좋은 것------------------
        - component programming과 유사합니다.
            - 기본적으로 회사들이 작업했던 프로그램 부품에 문제가 있는 경우
            - 많은 사람들이 같이 개발해서 만드는 시대가 되었습니다.
            - 이를 Open Source라고 하는데, 다수의 사용자가 업데이트를 하는 경우 충돌을 방지하기위해 객체 지향이 필요한 것입니다.
        - Source 공유
            - git : 업데이트 시기, 내용을 알 수 있어 적용하기 좋습니다.
                - git hub : 무료로 사용할 수 있는 서비스입니다.
         - Compile 환경 설정
            - Java 버전을 제한하는 환경이 필요합니다.
                - Ant, Maven, Gradle
            >>> 이를 Docker 가 편리하게 작업할 수 있게 도와주는 역할을 합니다.



-- 객체 지향_OOP
    - 관념의 객체 : Object
    - 설계도 : Class
    - 실제의 객체 : Instance

 - 객체 지향 언어
    - 특징
        - 코드의 재사용성이 높습니다.
        - 코드의 관리가 용이합니다.
        - 신뢰성이 높은 프로그램의 개발을 가능하게 합니다.

 -  객제 지향 언어의 속성
- 은닉화/캡슐화
   - 멤버를 숨김
   - private 선언
   - 간접적으로 접근 가능
- 상속성
- 다형성
- 추상화


    - 'Windows' > 'Preferences' > Ant : 따로 설정하지 않은 경우 지정한 jdk를 사용하여 Compile 하고 있습니다.
                                > *Gradle   : Spring Boots
                                > *Maven    : Spring Framework
                                > Version Control(Team) > *Git
                    - 스터디를 하는 경우 Gradle, Maven, Git을 공부하는 것이 좋습니다.

 - 클래스   // http://www.tcpschool.com/java/java_class_intro
- 구조체에 기능을 넣어 만든 형태입니다.
    - 객체를 정의한 것으로 객체를 생성하는 데에 사용합니다.
    - 여러 프로젝트의 통합 시에 충돌을 방지할 수 있습니다.

 - Object_객체 
    - 실제로 존재하는 것 또는 개념
    - 객체의 속성과 기능에 따라 용도가 달라집니다.
    - 클래스로 생성한 객체는 메모리에 저장됩니다.
        - 단일 타입이 아닌 경우 Heap 공간에 저장됩니다?
    - Instance_인스턴스를 포함하는 의미입니다.
    - 인스턴스 화 : 클래스로부터 인스턴스를 생성하는 것입니다.
    - 구성 요소
        - 속성_변수 + 기능_메소드로 정의합니다.
- 선언부(변수) + 기능(메소드)
   - 구조체
        - 서로 다른 자료형을 하나로 묶어주는 집합입니다.
    - 복잡한 구조로 컴퓨터가 자동으로 제공해줄 수 없으므로 개발자가 선언합니다.
        >> 새로운 자료형
    - 변수만 선언할 수 있습니다.
    - 변수 _ 어떠한 값을 저장 하는 장소입니다.
    - 배열 _ 동일한 자료형을 저장하는 장소입니다.

-------------------------------------------------------------------------------------------------------------
package '패키지 명'; 
import '패키지 명';

+ () 생략 가능
('접근 제한자') ('지정 예약어') class '클래스 명' (extends '상위 클래스 명') (implements '상위 인터페이스'){
     '접근 제한자' '지정 예약어' '자료형' '멤버 필드(변수명)';
     _ 변수(선언부)
     '접근 제한자' '지정 예약어' '반환형' '멤버 메소드(매개변수..)'{
         _ 기능 부여(메소드)
     }
     '접근 제한자' '생성자'() {}
     '중첩 클래스(내부 클래스)'
}
------------------------------------------------------------------------------------------------------------ -


    class '표현하고 싶은 데이터의 이름'{
        1) 멤버 필드 : 특성, 특징, 속성
            int number;
            String maker;
        2) 생성자
            2-1) 기본 생성자_Default
            '클래스 이름과 동일'() {}
        3) 메소드 : 기능, 동작
    }
        -- 컴파일 시 사용할 수 있는 클래스가 됩니다.

    -- 클래스 사용
    '생성한 클래스 이름' '변수 이름' = new '클래스 이름'();
        -- 변수 이름은 변경되어 여러 개를 생성할 수 있습니다.

class '클래스 명' {
    '자료형' '멤버 필드';
    '반환형' '멤버 메소드'('매개변수',...){
        return '반환값';
    }
}

- 멤버 필드
- 변수명을 선언해주는 것
- 멤버 메소드
    - 특정 작업을 수행하기 위한 명령문의 집합
    - 클래스 내부에서 기능을 위해 선언
- 반복되는 복잡한 작업을 손쉽게 사용하기 위함
반환형 : 반환값의 자료형
   - 종류
      1) void : 반환할 값이 없는 경우 없음을 반환
  2) 기본 자료형 : boolean, int, double, float, long, byte, char, short
  3) 클래스 : String
- 매개 변수 
   - 메소드가 실행될 때 초기값으로 주는 변수
   - 메소드가 없어도 실행됨
반환값 : 메소드 실행 후 결과를 내보냄
   - 반환형이 void일 경우, return 만 작성해도 됨(생략 가능)



'Sample.java'
=====     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.java.exam09;
 
public class Sample {
    
    // 멤버 필드
    int x;
    int y;
    
    // 생성자_default 생성자
    // public Sample(){}
    
    // 메소드
    
    // >>> 저장하면 바로 컴파일됩니다.
}




'Sampletest.java'
=====     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.java.exam09;
 
public class SampleTest {
    public static void main(String[] args) {
        
        // 기본 생성자로 선언
        Sample sp = new Sample();
 
        System.out.println("x : " + sp.x);
            /*
                x : 0
             */
        
        // 여기서 문제 : 멤버 필드에 직접적으로 접근할 수 있게 하는 것이 맞는지?
    }
}




'Sample.java'
=====     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.java.exam09;
 
public class Sample {
    
    // 멤버 필드
    private int x;          >>> private 으로 변경
    int y;
    
    // 생성자_default 생성자
    // public Sample(){}
    
    // 메소드
    
    /*
        private : 클래스 내부에서만 사용 가능
        default_생략 : 클래스 내부 + 같은 패키지
        public : 누구나 사용 가능
        protected : 클래스 내부 + 같은 패키지 + 상속 관계
     */
}





'SampleTest.java' > "The field Sample.x is not visible" : 접근 불가

'Sample.java'
=====     

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
package com.java.exam09;
 
public class Sample {
    
    // 멤버 필드
    private int x;
    int y;
    
    // 생성자_default 생성자
    // public Sample(){}
    
    // 메소드
    
    /*
        private : 클래스 내부에서만 사용 가능
        default_생략 : 클래스 내부 + 같은 패키지
        public : 누구나 사용 가능
        protected : 클래스 내부 + 같은 패키지 + 상속 관계
     */
    
    // getter/setter 메소드 생성    >>> [Shift] + [Alt] + [s] > 'Generate Getter and Setters...'
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
}





'SampleTest.java'
=====     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.java.exam09;
 
public class SampleTest {
    public static void main(String[] args) {
        
        // 기본 생성자로 선언
        Sample sp = new Sample();
        
        // setter 메소드로 값 변경 가능
        sp.setX(3);
        
        // getter 메소드로 접근 가능
        System.out.println("x : " + sp.getX());
            /*
                x : 3
             */
    }
}





=====     

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
package com.java.exam09;
import
 java.util.*;
public class same {
   public static void main(String[] args) {
       intro();
       // intro() 메소드 호출
       int num1 = input();
       // input() 메소드 호출
       // 반환된 num 값이 num1 값으로 지정됨
       int num2 = input();
       // input() 메소드 호출
       // 반환된 num 값이 num2 값으로 지정됨
       int tot = sum(num1, num2);
       // sum(a, b)메소드 호출
       // 매개 변수의 개수가 일치하는 메소드만 불러올 수 있음
       System.out.println(tot);
       // sum()메소드의 반환값을  출력
 
       output(num1, num2, tot);
       // output(a, b, c) 메소드 호출
  }
 
   public static int input() {
       // 매개 변수는 없고 반환형이 int인 'input' 메소드를 선언
       Scanner in = new Scanner(System.in);
       // 입력 받는 객체 생성
       System.out.print("Input number: ");
       // 출력됨
      int num = in.nextInt();
       // 입력 받음
       return num;
       // 입력받은 num을 반환
   }
 
  public static int sum(int a, int b) {
      // 매개 변수가 있고 반환형이 int 인 'sum' 메소드를 선언
       return a + b;
   }
 
   public static void output(int a, int b, int c) {
       // 매개 변수가 있고 반환형이 없는 'output' 메소드 선언
       System.out.printf("%d + %d = %d \n", a, b, c);
   }
 
   public static void intro() {
       // 매개 변수가 없고, 반환형도 없는 'intro' 메소드 선언
       System.out.println("+ Sum + ");
   }
}



반응형

'Java' 카테고리의 다른 글

Java_34_별칭  (0) 2023.09.28
Java_32_클래스 객체 배열  (0) 2023.09.27
Java_30_배열_Array 다차원 배열  (0) 2023.09.26
Java_29_반복문_do while문  (0) 2023.09.25
Java_28_반복문_while문  (0) 2023.09.24