인프런 커뮤니티 질문&답변

jdna1009님의 프로필 이미지
jdna1009

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

클래스 메소드

클래스 메소드

작성

·

342

0

(강이 내용중 클래스 메소드는 안에 있는 동작이 항상 똑같이 발생 한다고 하셨는데 )

클래스 메소드도 호출해서 사용 하고

그냥 메소드도 호출해서 사용하는데

그러면 클래스 메소드 안에서 항상 작동하는 동작들을

그냥 메소드 안에 넣어주어서 사용하면 되는거 아닌가요??

왜 굳이 클래스 메소드를 선언해서 사용하는지 이해가 안되네요

답변 2

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?
먼저 답변이 늦어 죄송합니다.

자바에서 클래스 메소드와 인스턴스 메소드는 서로 다른 목적과 동작을 가지고 있습니다. 클래스 메소드를 사용하는 이유는 몇 가지가 있는데요.

1. 공통된 동작을 수행할 때

클래스 메소드는 해당 클래스의 모든 인스턴스에 동일한 동작을 수행하는 데 사용됩니다. 인스턴스 메소드는 특정한 인스턴스에 대해 동작을 수행하지만, 클래스 메소드는 인스턴스와 상관없이 클래스 자체에 대한 동작을 수행합니다. 예를 들어, 수학적인 계산을 수행하는 유틸리티 클래스의 메소드는 대부분 클래스 메소드로 정의됩니다. 이렇게 하면 객체의 생성 없이도 해당 기능을 사용할 수 있죠.

2. 인스턴스에 접근할 필요가 없을 때

클래스 메소드는 해당 클래스와 관련된 동작을 정의하기 때문에, 인스턴스의 특정 상태에 접근할 필요가 없는 경우에 유용합니다. 예를 들어, 수학적인 계산을 수행하는 클래스의 메소드는 주로 입력값을 받아서 결과를 반환하는 형태로 정의됩니다. 이때 클래스 메소드를 사용하면 인스턴스 변수에 접근할 필요 없이 입력값에 대한 처리만 수행할 수 있답니다.

3. 객체를 생성하지 않고도 호출할 수 있을 때

클래스 메소드는 클래스 이름을 통해 직접 호출할 수 있습니다. 객체를 생성하지 않고도 클래스 메소드를 호출할 수 있기 때문에, 객체의 생성 과정이 필요하지 않은 경우에 유용합니다. 또한 클래스 메소드는 정적(static)으로 선언되어 공유되는 메모리 영역에 저장되기 때문에 호출 및 실행에 더 효율적입니다.


예를 들어볼까요?

수학 관련 클래스인 Math 에는 숫자의 절댓값을 반환하는 abs() 라는 메소드가 있습니다. 이 메소드는 클래스 메소드로 정의되어 있으며, 숫자의 절댓값을 구하는 데에 특정한 인스턴스에 의존하지 않고 사용할 수 있어요. 예를 들어, Math.abs(-10) 와 같이 클래스 이름을 통해 직접 호출하여 절댓값을 구할 수 있습니다.

System.out.println(Math.abs(-10)); // 실행 결과 10

다음과 같이 인스턴스를 생성하지 않고도 바로 사용할 수 있으므로 편리하죠.

Math math = new Math();
System.out.println(math.abs(-10));

반면에 문자열 관련 클래스인 String 에는 문자열의 길이를 반환하는 length() 라는 메소드가 있습니다. 이 메소드는 인스턴스 메소드로 정의되어 있으며, 특정한 String 객체의 길이를 반환하죠. 가령 다음과 같이 코드를 작성하게 되면 String 객체를 생성한 후 name.length() 와 같은 형태로 주어진 문자열의 길이를 구할 수 있습니다.

String name = "nadocoding";
System.out.println(name.length()); // 실행 결과 10 (10글자)

인스턴스 메소드는 특정 객체의 상태에 접근하여 동작하기 때문에, 각 인스턴스마다 다른 결과를 반환할 수 있지요.


앞의 두 예시에서 Math 클래스의 abs() 메소드는 숫자의 절댓값을 구하는 일반적인 기능을 제공하는 것이므로 클래스 메소드로 구현되어 있습니다. String 클래스의 length() 메소드는 특정 String 객체의 길이를 반환하는데, 이는 각 String 객체마다 길이가 다를 수 있으므로 인스턴스 메소드로 구현되어 있습니다. 둘의 차이가 느껴지시나요?

결국 클래스 메소드와 인스턴스 메소드는 각각 다른 상황에 맞게 적절하게 선택하여 사용해야 합니다. 클래스 메소드와 인스턴스 메소드를 잘 활용하면 코드를 더 유연하고 효율적으로 작성할 수 있어요 😊

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요.

클래스 메소드는 객체를 생성하지 않고 호출할 수 있는 메소드이며, 메소드 내에서 사용하는 변수와 같은 요소들이 클래스 변수로 선언되어 있습니다. 따라서, 클래스 메소드 내에서 항상 같은 동작을 수행하는 것이 가능합니다.

일반 메소드는 객체를 생성해야만 호출할 수 있으며, 메소드 내에서 사용하는 변수와 같은 요소들이 인스턴스 변수로 선언되어 있습니다. 따라서, 일반 메소드 내에서 항상 같은 동작을 수행하는 것은 불가능합니다.

그렇기 때문에, 클래스 메소드는 항상 같은 동작을 수행하며, 객체를 생성하지 않아도 바로 호출하여 사용할 수 있습니다. 일반 메소드는 객체를 생성하여야만 메소드를 호출할 수 있으며, 메소드 내부에서 사용하는 변수값들은 각 객체의 다른 값에 의해 영향을 받을 수 있기 때문에 항상 같은 동작을 보장하지 않습니다.

따라서, 클래스 메소드와 일반 메소드는 용도가 다르고, 한 메소드 내에서 고정적으로 실행되는 코드 블럭이 있다면 클래스 메소드로 정의하는 것이 좋습니다.

간단하게 설명드렸지만, 추가적인 궁금한 점이 있으시면 언제든지 댓글로 문의해주세요. 감사합니다.

jdna1009님의 프로필 이미지
jdna1009

작성한 질문수

질문하기