[JAVA] 메서드 / 객체 / 클래스 / this / 생성자

형이·2023년 7월 8일
0

JAVA

목록 보기
6/19
post-thumbnail

📝 Day 5-(1)

🖥️ 1. 메서드 (method)

1-1. 메서드란

📎 특정 기능(=연산)을 그룹화 해서 재사용하기 위한 단위

	public static void 메서드이름(){
		...수행할 연산식..
	}

1-2. 메서드의 호출

📎 정의된 메서드는 다른 메서드를 구성하는 {...}안에서 다음의 형식으로 사용될 수 있으며, 이를 메서드를 호출한다 라고 한다

	메서드이름();

1-3. 메서드의 파라미터 (매개변수)

📎 java프로그램의 메서드는 자신이 실행되는데 필요한 조건값을 메서드
이름 뒤의 괄호안에서 변수 형태로 선언한다. 이를 메서드 파라미터(매개변수)라고 표현

	public static void 메서드이름(변수형 변수이름){

	}

📌 메서드가 연산을 수행하는 데에 있어 두 개 이상의 파라미터가 필요하다면 콤마(,)로 구분하여 선언 가능 → 다중 파라미터

	public static void 메서드이름(변수형 변수이름,변수형 변수이름, ... ,){

	}

1-4. 파라미터를 갖는 메서드의 호출

📎 메서드 정의하면서 파라미터가 명시되어 있다면 해당 메서드를 호출하면서 파라미터를 전달해 주어야함

	public static void 메서드이름(변수형 변수이름, 변수형 변수이름){...};

	메서드이름(값1, 값2);

1-5. 값을 반환하는 메서드

📎 메서드의 리턴값

📎 메서드가 연산 결과를 자신이 호출된 위치에 반환하는 것을 "리턴"이라고하며, 반환되는 값을 "리턴 값"이라 함

📎 메서드 안에서 값을 리턴하기 위해서는 "return" 이라는 키워드 사용

📎 값을 리턴하는 메서드는 선언시에 "void"키워드 대신, 리턴하는 값에 대한 변수형이 명시된다 ("void"는 리턴값이 없다는 의미)

	public static 리턴형 메서드이름(변수형 파라미터1, 변수형 파라미터2,..){
		.....
		return 리턴값;
	}

1-6. 메서드 간의 상호 호출

📎 JAVA메서드 역시 서로 호출하는것이 가능

📎 호출된 메서드가 값을 텍스트 리턴하는 경우, 리턴 받은 값을 다른 연산자에 사용할 수 있다.


🖥️ 2. 객체지향 프로그래밍과 객체

2-1. 객체 (Object)

📎 프로그래밍에서의 객체 : 프로그램에서 표현하고자 하는 기능을 묶기 위한 단위

2-2. 객체지향 프로그래밍

📎 객체가 중심이 되는 프로그래밍 기법

2-3. 객체를 구성하는 단위

📌 객체를 이루는 것은 데이터와 기능

 📎 데이터는 변수로 표현

 📎 객체 안에 포함된 변수를 멤버변수 혹은 프로퍼티라고 한다

 📎 기능은 메서드(=함수)로 표현

2-4. 클래스와 객체의 관계

📎 객체를 생성하기 위해서는 객체의 설계도가 필요


🖥️ 2-1 클래스

2-1-1. 클래스(class)

📎 객체의 설계도 역할을 하는 프로그램 소스

📎 공장에서 하나의 설계도를 사용하여 여러개의 제품을 생산할 수 있는
것처럼 하나의 클래스를 통해 동일한 구조를 갖는 객체를 여러개 생성할 수 있다.

📎 동일한 설계로 만들어진 자동차라 하더라도, 각각의 자동차를 구성하는
부품들은 형태만 같을 뿐 실제로는 각각 존재

📎 클래스를 작성하면서 그 안에 생성되는 멤버변수들은 여러 개의 객체 간에 서로 동일한 이름으로 존재하지만 실제로는 서로 다른 값이라는 의미

2-1-2. 클래스 기본 작성 방법

	class 클래스 이름{
		멤버변수;

		void 메서드이름(){
			...
		}
	}

📎 'class'라는 예약어와 클래스의 이름을 명시하고 {...} 블록으로 구성

📎 멤버변수는 여러개 존재할 수 있다. 값을 선언과 동시에 할당할 수 있고, 객체를 통해 간접적으로 할당하는 것도 가능

📎 메서드는 여러개 존재할 수 있다

📎 클래스 안에 포함된 멤버변수와 메서드를 특성에 따라 그룹화 하기
위한 기법이 클래스를 작성하는 것이라고 이해할 수 있다


🖥️ 2-2. 객체

2-2-1. 객체의 생성 방법

📌 객체를 선언

 클래스이름 객체이름;

📌 객체의 할당

 객체이름 = new 클래스이름();

📌 선언과 할당의 통합

 클래스이름 객체이름 = new 클래스이름();

2-2-2. 객체의 사용

📌 객체 안에 포함된 변수나 메서드는 점(.)으로 연결하여 접근

 객체이름.멤버변수 = 값;

 객체이름.메서드이름();

 객체이름.메서드이름(값1, 값2, ..);

2-2-3. 클래스를 정의하면서 멤버변수에 값을 직접 대입하는 경우

📎 객체를 생성함과 동시에 객체 안에 name변수와 age변수가 할당된 값을 포함

📎 같은 클래스로 객체를 여러 개 생성할 경우, 모든 객체가 동일한 값을
갖게 된다

📎 멤버변수의 값을 지정하기 전까지 사용될 "기본값"으로써의 의미

📎 일반적으로 클래스 작성 시에는 멤버변수에 값을 지정하지 않는다

2-2-4. 메서드를 포함하는 클래스

📎 메서드란 프로그램에서 하나의 동작 단위를 의미

📎 두 개 이상의 메서드가 서로 동일한 대상을 위해서 존재할 경우 이 메서드들을 클래스에 포함시켜 그룹화 할 수 있다

📎 클래스에 멤버변수와 메서드가 공존할 경우, 멤버변수는 모든 메서드가 공유하는 전역 변수로 존재하게 된다

2-2-5. 변수의 종류

📌 멤버변수 (= 전역번수)

 📎 클래스 안에서 선언된 변수로써 클래스 블록 범위 안에서 유효

📌 지역변수

 📎 메서드 안에서 선언된 변수로써 메서드의 블록을 빠져나가지 못한다. 그러므로 다른 메서드는 해당 변수를 인식하지 못한다 → 이 규칙은 조건, 반복문과 같은 블록 { }를 형성하는 모든 경우에 해당

2-2-6. 메서드만을 포함하는 클래스

📎 객체 안에 멤버변수(=데이터)가 포함되지 않는다

📎 객체 안에 포함된 메서드를 호출하여 결과를 만들기 위한 목적이므로 굳이 여러개의 객체를 생성할 필요가 없다


🖥️ 3. 클래스, 메서드, 상수의 이름 규칙

3-1. 공통 이름 규칙

  • 영어 + 숫자 + 언더바(_)의 조합이고, 첫 글자는 반드시 영어로 표기한다.

3-2. 클래스 이름 규칙

  • 첫 글자는 대문자로 시작, 나머지 글자는 소문자로 표시한다.

  • 두 개 이상의 단어를 조합해야 할 경우 새로운 단어는 대문자로 시작한다.

    	class MyClass
    	class Student
    	class NetworkHelper

3-3. 메서드, 변수 이름 규칙

  • 대부분 소문자로 구성되만, 두개 이상의 단어를 조합할 경우 새로운 단어는
    대문자로 표시한다.

3-4. 상수 이름 규칙

  • 모두 대문자로 표시한다.

    	final double PI;
    	final int COLOR

🖥️ 4. this

4-1. this란

📎 자기 자신을 의미하는 키워드

📎 클래스 안에서 this를 사용하여 "자기자신"을 표현

4-2. this를 사용하여 멤버변수/지역변수 구분하기

	class User{
		String name;

		public void setName(){
			String name;
			name = "자바학생";
		}
	}

📎 멤버변수와 지역변수가 동일한 이름으로 공존할 경우 유효성의 범위가 작은 변수가 우선적으로 인식

	class User{
		String name;

		public void setName(){
			String name;
			name = "자바학생";
			// 현재 클래스의 자신의 변수.
			// 즉, 멤버변수로 선언된 name을 의미한다.
			this.name = "자바";
		}
	}

4-3. this를 사용하여 파라미터/멤버변수 구분하기

📎 파라미터도 해당 메서드 안에서만 유효한 지역변수의 일종

📎 파라미터를 사용하여 멤버변수의 값을 간접적으로 설정하고자 할 경우 → 변수의 이름을 서로 다르게 사용하는 것 보다는 이름은 동일하게 지정하고, this 키워드를 사용하여 멤버변수와 파라미터를 구별하는 것이 java언어의 일반적인 처리 방식

	class User{
		String name;

		public void setName(String name){
			this.name = name;
		}
	}
	-------------------
	User u = new User();
	u.setName("자바학생");
	System.out.println(u.name);	// 자바학생

📎 모든 멤버변수 앞에는 this 키워드를 사용하여 멤버변수임을 직관적으로 표시하는 것이 소스코드의 가독성을 위하여 바람직

4-4. 현재 클래스의 메서드를 의미하는 용도로써의 this

	class User{
		public String getName(){
			String name = "자바학생";
			return name;
		}

		public void sayName(){
			String myname = this.getName();
			System.out.println(myname);
		}
	}

📎 메서드의 경우 다른 클래스의 메서드를 이름만으로 호출할 수 있는 방법이 없기 때문에, this.getName()이 아닌, getName() 만 사용하더라도 코드 가독성의 문제는 없다


🖥️ 5. 생성자

5-1. 생성자란

Member member = new Member();

📎 new 키워드를 사용하여 객체가 생성될 때 자동으로 실행되는 특수한 형태의 메서드

📎 리턴형을 명시하지 않으며, 메서드의 이름은 클래스와 동일

	class Member{
		Member(){
			// 이 안은 객체가 생성될 때 자동으로 호출된다.
		}
		....
	}

📎 자동으로 실행된다는 특성 때문에 객체가 생성되면서 해당 객체의 특성을 초기화 하기 위하여 사용 (ex. 멤버변수의 초기값을 할당하는 용도)

5-2. 기본 생성자

📎 파라미터가 없는 생성자

📎 클래스에 특별히 생성자가 정의되지 않은 경우 java 컴파일러는 다음과 같은 기본 생성자가 존재한다고 인식

	class User{
		User(){
			// 생성자가 있지만, 내용이 비어있다.
		}
	}

5-3. 파라미터를 갖는 생성자

📎 생성자도 메서드의 한 종류이므로 파라미터를 함께 정의하는 것이 가능

📎 생성자의 파라미터를 멤버변수에 복사하는 것으로 객체의 초기화를 외부적인 요인에 의해 처리할 수 있다

	class Student{
		String name;
		int age;

		Student( String name, int age ){
			// 생성자 파라미터의 값을 멤버변수에 복사
			this.name = name;
			this.age = age;
		}
	}
	--------------------------
	📌 생성자에 파라미터가 정의된 경우 객체 생성 구문에서 해당 파라미터를 전달

	Student std = new Student("자바학생", 20);

0개의 댓글