강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • CSS 박스 크기 설정
  • 자바
  • CSS 속성
  • 알고리즘 공부
  • 메서드
  • til
  • 백준
  • 메소드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇

강이의 개발블로그

[Java] 필드와 메서드
Langauge/Java-basic

[Java] 필드와 메서드

2022. 7. 18. 01:12

필드(field)

필드

  • 클래스에 포함된 변수로 객체의 속성값을 지정할 수 있다.
  • 힙 메모리의 객체 내부에 생성되며, 객체가 사라지지 않는 한 절대로 삭제되지 않는다.
  • 직접 초기화를 하지 않아도 강제 초기화가 된다. 초기화 값은 기본 자료형은 각 자료형에 맞게 초기화되며, 참조 자료형은 null로 초기화된다. (힙 메모리 특징)

지역 변수

  • 메서드 내에 포함된 변수
  • 스택 메모리에 생성되며, 메서드가 종료되면 자바 가상 머신이 자동으로 프레임을 삭제한다.
  • 1개의 메서드 안에 선언된 모든 지역 변수들의 집합을 '프레임(frame)'이라 한다.
  • 직접 초기화를 하지 않으면 빈 공간으로 남아 있으며 출력을 시도할 경우 예외를 발생한다. (스택 메모리 특징)
// 필드와 지역 변수
class MyClass {
    int num;  // 필드, num = 0;
    double dNum; // 필드, dNum = 0.0;
    ...
    public void myMethod() {
        int num;  // 지역 변수, num = [] 빈 공간
        double dNum;  // 지역 변수 dNum = [] 빈 공간
        ...
    }
}

메서드

  • 메서드는 "특정 작업을 수행하는 일련의 명령문들의 집합"을 의미하며, 클래스의 기능에 해당하는 요소다.
  • 사람이라는 클래스로 예를 들면 먹기, 자기, 일하기 등이 메서드로 구성된다.

메서드 생성

  • 접근 지정자 : 접근할 수 있는 범위를 지정하는 역할
  • 리턴 타입 : 메서드 종료 이후 반환되는 값의 자료형
    void를 제외한 모든 리턴 타입은 return 키워드와 함께 반환할 값이 반드시 있어야 함.
  • 메서드명 : 변수명과 선정 규칙 동일 -> 카멜 표기법
  • 입력매개변수 : 메서드가 호출될 때 전달받을 값의 자료형과 저장할 지역 변수명
  • 메서드 내용 : 메서드가 호출될 때 수행할 내용 작성
접근 지정자 리턴 타입 메서드명(입력매개변수1, 입력매개변수2, ...) {  // 메서드 시그니처
    메서드 내용  // 메서드 바디
}

public void sleep(String place) {
    System.out.println(place + "에서 잠을 잡니다.");
}

public int add(int num1, int num2) {
    int result = num1 + num2;
    return result;
}

메서드 호출

외부에서 메서드 호출

  • 메서드도 클래스의 멤버이므로 클래스 외부에서 메서드를 사용하기 위해 반드시 인스턴스를 생성해야 한다.
  • 인스턴스 생성 후 포인트 연산자(.)를 통해 메서드를 호출할 수 있다.
  • 메서드 앞에 static 키워드가 붙은 메서드는 정적 메서드라 하며, 객체를 생성하지 않고 바로 호출 가능한 키워드이다.
public class Main {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        System.out.println(myClass.printHelloMsg1()); // 출력 : Hello!
        myClass.printHelloMsg(); // 출력 : 안녕하세요.
        
        MyClass.staticMethod(); // 출력 : 객체 생성 잆이 호출 가능
    }
}

class MyClass {
    public String printHelloMsg1() {
        return "Hello!";
    }
    
    public void printHelloMsg2() {
        System.out.println("안녕하세요.");
    }
    
    public static void staticMethod() {
        System.out.println("객체 생성 없이 호출 가능");
    }
}

내부에서 메서드 호출

클래스 내부에 있는 메서드끼리는 같은 멤버이기 때문에 인스턴스를 생성하지 않고 호출할 수 있다.

public class Main {
    public static void main(String[] args) {
        int num1 = 30;
        int num2 = 20;
        int total = add(num1, num2);
        System.out.println(total); // 출력 : 50
    }
    
    public static int add(int num1, int num2) {
        return num1 + num2;
    }
}

 

메서드 입력매개변수 기본 자료형과 참조 자료형

  • 기본 자료형을 인자로 메서드를 호출하면 데이터를 복사한 값을 전달한다.
  • 참조 자료형을 인자로 메서드를 호출하면 실제 데이터 값이 저장된 위치값을 전달한다.
  • 따라서, 기본 자료형을 인자로 받은 메서드에서 데이터를 수정하여도 복사본이 수정되지만(원본 그대로), 참조 자료형을 인자로 받는 메서드에서 데이터 값을 수정할 경우 원본값이 수정된다.
public class Main {
    public static void main(String[] args) {
        int[] arr = new int[1];
        int num = 0;
        add(arr);
        add(num);
        System.out.println("메서드 호출 후 arr 0번째 값 : " + arr[0]);
        System.out.println("메서드 호출 후 num 값 : " + num);

    }

    static void add(int[] arr) {
        System.out.println("수정 전 arr 0번째 값 : " + arr[0]);
        arr[0]++;
    }

    static void add(int num) {
        System.out.println("수정 전 num 값 : " + num);
        num ++;
    }
}

저작자표시 (새창열림)

'Langauge > Java-basic' 카테고리의 다른 글

[Java] 생성자  (0) 2022.07.20
[Java] 메서드 시그니처와 메서드 오버로딩  (0) 2022.07.19
[Java] 클래스와 객체  (0) 2022.07.13
[Java] 배열  (0) 2022.07.11
[Java] 제어문 (조건문 / 반복문 / 제어키워드)  (0) 2022.07.08
    'Langauge/Java-basic' 카테고리의 다른 글
    • [Java] 생성자
    • [Java] 메서드 시그니처와 메서드 오버로딩
    • [Java] 클래스와 객체
    • [Java] 배열
    강잇
    강잇
    학습한 내용을 정리 및 기록하는 블로그

    티스토리툴바