본문 바로가기

Programming 언어/JAVA

4. 자바 클래스 및 함수와 메서드

1. 클래스 

클래스는 객체의 속성을 정의하고, 기능을 구현하여 만들어 놓은 코드 상태

1. public 이란 어디서든지 접근이 가능하다는 것

2. public 이라는 이름을 가진 클래스는 파일에 단 하나 그리고 파일 이름이랑 클래스 이름이 같아야함

public으로 선언된 접근 제어자는 같은 패키지 클래스는 물론이고 다른 패키지의 클래스도 접근이 가능!!!

또한, 클래스 이름을 만들때는 첫긇자를 대문자로 쓸 것!

클래스 사용하기

이렇게 Student 클래스를 만들었다. 어찌 사용할까??

--> 클래스를 사용하는 클래스를 만들자!!

이렇게 클래스를 사용할 클래스를 만들고 

Student 클래스 객체를 만들자!

--> 이때! 만들어진 객체를 '인스턴스'(참조변수) 라고 한다.

// 인스턴스 //

실제 클레스 기반으로 생성된 객체

1. 각각 다른 멤버 변수 값을 가짐 -> 가령, 학생 클래스에서 생성된 각각의 인스턴스는 각각 다른 이름, 학번, 학년등의 값을 가진다.

2. new 키워드를 사용하여 인스턴스 생성

// 힙 메모리(동적 메모리)//

생성된 인스턴스는 동적(힙) 메모리에 할당

1. C나 C++에서는 사용한 동적 메모리를 프로그래머가 해제 시켜야함

2. 자바에서는 Gabage Collector 가 주기적으로 사용하지 않는 메모리를 수거

3. 하나의 클래스로부터 여러 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 된다.

2. 객체 지향 프로그램을 할 때는 

1. 객체의 정의

2. 객체의 속성을 멤버 변수로 역할을 메서드 구현

3. 각 객체간의 협력 구현

생성자(이후 추가로 다룰 것)

1. 자바에서는 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 생성자(constructor)라는 메소드를 제공

2. 자바에서 생성자(constructor)의 이름은 해당 클래스의 이름과 같아야한다.(즉, Car 클래스 생성자의 이름은 Car가 됩니다. 

생성자의 특징

1. 생성자는 반환값이 없지만, 반환 타입을 void형으로 선언하지 않는다.

2. 생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다.

3. 객체를 초기화하는 방법이 여러 개 존재할 경우에는 하나의 클래스가 여러 개의 생성자를 가질 수 있다.(생성자도 하나의 메소드이므로, 메소드 오버로딩이 가능하다.)

생성자의 기본적인 형태

자바에서 생성자(constructor)는 클래스의 인스턴스(객체)를 초기화하는 특별한 메서드

생성자는 new 키워드를 사용하여 객체를 호출할 때 자동으로 호출되며, 객체의 초기 상태를 설정하는데 사용된다.

생성자의 주요 목적

1. 객체의 초기 상태를 설정

-> 생성자 내부에서는 주로 멤버 변수의 초기화, 다른 객체의 생성, 리소스 할당 등의 작업 수행. 또한, 매개변수를 통해 초기화에 필요한 값을 전달 받을 수 있음

생성자를 사용하여 객체를 초기화하면 객체를 사용하기 전에 필요한 설정을 수행할 수 있습니다.

위의 예에서 생성자 ClassName(int value)는 매개변수 value를 받아 객체의 value 멤버 변수를 초기화

'this' 키워드는 현재 객체를 가리키는 참조를 의미!

생성자의 오버로딩

동일한 이름의 생성자가 다른 매개변수를 가질 수 있다.

이렇게 new를 이용해서 호출하며 매개변수가 있는 생성자 or 매개변수가 없는 생성자를 호출할 수 있음

// 오버로딩 //

자바에서 오버로딩(Overloading)은 동일한 이름을 가진 메서드나 생성자를 여러 개 정의하는 것

오버로딩을 사용하면 코드의 가독성과 재사용성을 높일 수 있고 다양한 상황에서 동일한 작업을 수행하는 메서드를 동일한 이름으로 호출할 수 있어 편리

오버로딩의 규칙

1. 오버로딩은 같은 클래스 내에서만 선언 가능

2. 오버로딩된 메서드는 메서드 이름이 동일해야 하지만, 매개변수의 유형, 개수, 순서가 달라야함 

3. 반환 타입은 오버로딩에 영향을 주지않음! -> 매개변수의 유형만 다르고 반환 타입이 다르면 오버로딩으로 간주 x

4. 오버로딩된 메서드는 호출 시 전달된 인수에 가장 잘 맞는 시그니처를 가진 메서드 자동 선택(그냥 알아서 잘 맞는거 선택한다고 생각)

위의 예에서 print 메서드는 같은 이름을 가졌는데, 매개변수의 유형에 따라 다르게 동작

이렇게 오버로딩된 메서드를 사용하면 다양한 유형의 인수를 전달하여 원하는 결과를 얻을 수 있음

오버로딩은 생성자에서도 적용될 수 있으며 생성자 오버로딩을 사용하면 다양한 매개변수 조합으로 객체 초기화 가능

//자바에서 오버로딩은 코드의 유연성 및 가독성을 높이는 중요 개념, 메서드나 생성자 이름을 신중하게 선택하고, 다양한 매개변수 조합을 고려하여 오버로딩을 적용할 수 있다.//

3. 함수와 메서드

함수

1. 하나의 기능을 수행하는 일련의 코드

2. 구현된 함수는 호출하여 사용, 호출된 함수는 기능이 끝나면 제어가 반환

3. 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용

C언어랑 구현 방법이 비슷!

함수 호출과 스택 메모리

1. 스택 

함수가 호출될 때 지역 변수들이 사용하는 메모리이고 함수의 수행이 끝나면 자동으로 반환되는 메모리다.

위의 그림처럼 main() 함수가 맨아래 있고 add() 함수가 실행된다면 main() 함수 위에 생성된다.(스택)

또한, add() 함수가 수행되고나면 메모리가 해제되어 main() 함수만 남음

메서드

1. 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수

2. 멤버 함수라고도 한다.

3. 메서드를 구현함으로써 객체의 기능이 구현된다.

4. 메서드의 이름은 그 객체를 사용하는 객체에 맞게 지어라