본문 바로가기
카테고리 없음

[JAVA] 클래스(Class)와 메소드(Method)

by 지에스정 2021. 11. 26.

자바가 객체지향언어로써 사용되는 중요한 부분이 클래스이다.

 

클래스와 메소드를 통해 원하는 프로그램을 코딩할 수 있게 만들어 준다고 볼 수 있다

 


String 클래스

 

 "hello" -- > char[] --> {'H''e''l''l''o'}

문자열의 본질은 문자배열

값을 담은 문자배열 + 유용한 메소드 --> 문자열 클래스로 구현

 


 

 메소드

 

이름 뒤에 소괄호

단, 키워드 뒤에 ()나 클래스 뒤에 ()는 메소드가 아니다

반복되는 코드, 기능, 행위, 처리 등을 쉽게 관리하기 위해 사용

반복이 규칙적이지 않고 우리가 원할 때 특정 코드를 수행하고 싶을 때 메소드로 만들어 놓고 후에 호출해서 사용한다

 

function (x) = 2x + 1 ;
메소드이름 매개변수 리턴값

 

 

메소드 구조

 

(1)리턴타입 (2)메소드명((3)자료형 매개변수, 자료형 매개변수, ...){
	(4)호출시 실행할 문장
	(5)return 리턴값;
}

 

(1) return 뒤의 값의 타입에 맞는 자료형을 작성해준다

리턴값이 없을 때에는 void로 작성한다

(2) 동사형으로 작성 / ex) eat("치킨")

(3) 생략이 가능 / 하지만 생략시에는 외무(사용하는 곳)에서 값을전달 받을 수 없다

여러값을 전달받아야 할 경우에는 , 로 구분하여 그 값들 만큼 선언해 주어야 한다

사용시에는 매개변수의 타입과 개수에 맞게 순서대로 값을 전달해 주어야 한다

(4) 생략이 가능 / 메소드 호출때마다 수행해야하는 코드를 그대로 작성한다

(5) 생략이 가능

 

메소드 선언 순서

 

 (두 정수의 덧셈 메소드)

 

 1.  메소드 명을 생각한다

void add(){
}

 2. 매개변수를 생각한다

void add(int num1, int num2){
}

 3. 실핼할 문장을 생각한다

void add(int num1, int num2){
	int result = num1 + num2
}

 4. 리턴값을 생각한다

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

5. 리턴타입을 수정한다

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

 

메소드 사용

 

메소드는 클래스 내부에 있으므로 그 메소드가 속해 있는 크래스 타입으로 먼저 변수를 만들어 주어야 한다(객체화를 진행해 주어야 한다)

클래스명 변수명 = new 클래스명();
변수.메소드명(); // 매개변수가 없는 것은 그대로 이름으로 사용한다
변수.메소드명(값1, 값2, ...); //매개변수의 개수와 타입에 맞게 값을 넘긴다

메소드 사용 부분은 선언부 마지막에 return값이 있다면 사용한 부분 통째로 그 리턴값으로 보아야 한다

단, return값이 없다면 절대 값으로 봐서는 안된다

 

리턴을 사용해야 할 때

 

메소드 내부에서 모든 기능이 구현되지 않을 때

사용하는 부분에서 아직 할 작업이 남았을 때

메소드 기능의 결과를 사용하는 부분에 알려주어야 할 때

 

리턴을 사용하지 않아도 될 때

 

메소드 내에서 모든 기능이 구현될 때

 


Storage class(저장 기억 부류)

 

지역 변수 : 메소드 내부에 선언된 변수

전역 변수 : 클래스 내부에, 메소드 바깥에 선언된 변수

정적 변수 : static이 붙은 변수

 

  지역변수 전역변수 정적변수
초기화 직접 자동 자동
생명주기 } 프로그램 종료시 프로그램 종료시
접근석

 

클래스(반)

 

여러 변수들과 메소드들을 둘다 관리하기 위해 설계하고 사용한다

공통 요소들을 추상적으로 묶어놓은 틀

 

1.  주어이다

 

System.out.println()

모든 문장 맨 앞에는 클래스가 나오고

영어는 맨 앞을 할상 대문자로 적는다

 따라서 클래스는 주어이고, 대문자로 시작한다

 

String food = "banana";
Monkey.eat(food);
[주어][동사][목적어]

2.  타입이다

클래스는 추상적인 개념이고 이 클래스 안에는 필드가 존재한다

추상적인 것을 바로 사용할 수 없기 때문에 그 필드들을 구체화 시킨 대상이 필요하다

이러한 것들을 "객체"라고 부르고 영어로는 instance variable 이라고 한다

 

 instance 예, 예시라는 뜻이고 추상적인 개녀의 한 예시로서 객체가 나오기 때문에 instance variable 이라고 부른다

(자동차(클래스) 내차 (객체))

 

추상적인 개념인 클래스를 객체로 구체화해서 만드는 작업을 객체화라고 한다

클래스명 객체명;

 

따라서 클래스는 이때 만들어지는 갹체의 타입이다

 

클래스 선언

 

다른 클래스 외부에서 선언한다

class 클래스명{
	필드(변수, 메소드)
}

 

클래스 사용

 

클래스는 추상적인 틀이기 떄문에 먼저 객체화를 진행한다

클래스명 객체명 = new 클래스명();
객체.메소드명()
객체.변수명

 

하나의 저장공간에는 단 한개의 값만 담을 수 있다

필드에는 여러개의 값이 존재하기 때문에 필드는 다른곳(Heap)에 할당되고 할당된 필드의 주소값을 저장하는 것이 객체이다

 

생성자

 

클래스명 뒤에 소괄호

생성자는 메소드와 똑같은 기능을 가지고 있다

하지만 객체를 생성해 주고 리턴을 할 수 없기 떄문에 메소드라고 부르지 않는다

 

클래스 선언시 자동으로 생성자가 하나 만들어지고 코드상에는 나타나지 않는다

이러한 생성자릉 기본 생성자라고 하며, 만약 직접 생성자를 선언하면 기존에 있던 기본 생성자는 사라진다

 

생성자의 목적

 

1.  클래스의 필드르 똑같이 복사해서 메모리에 할당해주고 할당된 필드의 주소값을 돌려 받기 위함 / 객체화의 목적

 2.  호출시 내부의 내용을 수행하기 위함 / 초기화의 목적

 

this

 

클래스 선언시 내부적으로 선언되어 생성된다

클래스 필드에서 하나의 메소드 선언으로 여러 객체를 다루어야 한다

만약 메소드 내에서 필드를 사용하고자 할 떄 어떤 객체의 필드인지를 알 수 없다

따라서 객체에 마침표를 찍고 필드에 접근하거나 어떤 객체를 생성중에는 현재 접근한 그 객체를 this 변수가 받는다

결과적으로 클래스 선언시 this.필드명으로 접근하면 여러 객체를 하나의 메소드에서 구분하여 다룰 수 있게된다 (객체 구별용 변수)

 

 

 

public class Zoo {
	public static void main(String[] args) {
		//동물 3마리 만들어 울게 만들기 
		//이름, 나이, 성별, 종 
		// 먹기, 자기, 움직이기, 울기 
		Animal tiger = new Animal("호식", 10, "호랑이", "어흥 !", true);
		Animal el = new Animal("코봉", 20 , "코끼리", "뿌우우우~ ", false);
		Animal tutle = new Animal("느림보", 85 , "거북이", "...", true);
		
		tiger.roar();
		el.roar();
		tutle.roar();
		
		System.out.println(tiger.gender);	
	}	// 해석
}