💡BE/JAVA

[JAVA] 클래스의 구성 요소

뇌 리셋은 기본이지 2024. 12. 31. 00:23
글쓴이가 이해한 내용으로 구성하였습니다.
틀린 부분이 있다면 지적 부탁드립니다.🙏


 

 

우선 공부를 위한 자바 프로젝트를 생성한 후 진행을 해주었습니다.
이미 워크스페이스에 자바 프로젝트가 구성되어 있다면 해당 단계는 띄어넘기셔도 됩니다🐻

● Eclipse Version : 2023-03 (4.27.0)
● Java Version    : JavaSE-17

자바 프로젝트 생성

글쓴이는 이클립스 내에 프로젝트는 모두 삭제하여 클린한 상태로 진행해주었습니다.

프로젝트 생성

1단계

  • 프로젝트 생성 시 글쓴이가 사용했던 두 가지 방법을 소개드립니다.

 

첫번째 방법

  • 첫 실행 시 좌측에 보이는 Project Explorer 탭에서 Creat e a prject 클릭

두번째 방법

  • File → New → Project…
    ※ 만약 New 다음에 Java Proejct가 있는 경우 그것을 바로 클릭해주면 됩니다  

 

2단계

  • New Proejct → Java Proejct → Next >

3단계

  • Project name(프로젝트명)만 작성 후 Finish 클릭
  • 프로젝트명은 대/소문자 구분없이 시작이 가능합니다.

생성 완료

패키지 생성

1단계

  • New → Package
  • src 폴더 밑에 생성해야하기 때문에 src를 오른쪽 마우스로 클릭

2단계

  • Name 작성 후 Finish 클릭
  • 패키지명은 대/소문자 모두 허용하지만 소문자로 시작하는 것이 원칙입니다.

생성 완료

좌 : 생성된 패키지 / 우 : 생성된 패키지의 경로

클래스 생성

1단계

  • New → Calss
  • src 파일 밑에 있는 exam 패키지 내에 Class 파일을 생성하는 작업

2단계

  • Name 작성 후 Finish 클릭
  • 클래스명은 파스칼 표기법을 사용하며, 명사로 작성해야 합니다.

생성 완료

좌 : 생성된 클래스 파일 / 우 : 생성된 클래스 파일의 경로

바이트 코드 실행

  1. 실행하고자 하는 자바 파일을 오른쪽 마우스로 클릭한다.
  2. Run As → Java Application을 차례대로 클릭한다.

클래스의 구성 요소

  • 자바에서 클래스는 객체의 데이터가 저장되는 필드(Field)와 객체 생성 시 초기화 역할을 담당하는 생성자(Constructor), 객체의 동작에 해당하는 실행 블럭인 메소드(Method)를 가진다.
필드 생성자 메소드
객체(물건)의 정보 객체생성(물건제작)시 사용 객체의 기능, 동작 구현(=함수)

필드(Field)

  • 객체의 고유 데이터를 저장할 수 있습니다.
  • 객체의 현재 상태 데이터 등을 저장할 수 있습니다.
  • 객체를 예로 들자면 물건이고, 객체의 데이터는 물건의 정보를 뜻합니다.
  • 기본 타입 변수와 참조 타입 변수를 가질 수 있습니다.

필드 선언

  • 필드와 생성자를 담은 클래스 파일

  
package exam;
public class Example01 {
//필드
String name;
int age;
String schoolName = "Yea";
//생성자 - 필드를 사용하기 위해 선언함
public Example01() {
}
}
  • 필드와 생성자를 담은 클래스를 인스턴스화 하여 실행시킨 메인 메소드

  
package exam;
public class Main {
public static void main(String[] args) {
Example01 exam01 = new Example01();
System.out.println("이름 > " + exam01.name);
System.out.println("나이 > " + exam01.age);
System.out.println("학교명 > " + exam01.schoolName);
}
}
  • 결과

타입 변수명 초기화 값 상세설명
String name   초기화되지 않았기 때문에 null 출력
int age   초기화되지 않았기 때문에 0 출력
String schoolName "Yea” 초기화 시 "Yea"로 설정되었기 때문에, "Yea"가 출력

생성자(Constructor)

  • 클래스로부터 new 연산자로 객체를 생성할 때 호출되어 객체의 초기화를 담당합니다.

객체의 초기화

  • 필드를 초기화하거나 메소드를 호출하여 객체를 사용할 준비를 하는 것을 의미합니다.

생성자 선언

글쓴이가 소개할 생성자 선언은 두 가지이다.

 

1. 기본생성자

  • 아무런 데이터가 없는 생성자를 기본 생성자라고 일컫습니다.
  • 기본 생성자는 class 내부에 생성되지 않아도 자바가 알아서 생성 후 컴파일(실행) 시킵니다.

  
package exam;
public class Example02 {
//필드
//기본생성자
Example02() {
}
//메소드
}

 

2. 실행문이 존재하는 생성자

2.1. 첫번째 예시

  • 객체를 만들 때 어떠한 행동을 취하고 싶을 때 사용됩니다.
  • 매개변수, 객체 생성 시 실행문을 정의합니다.

  
package exam;
public class Example02 {
//객체 초기화(생성)할 때 어떠한 행동(생성자 안에 정의된)을 하고 객체를 생성해라.
Example02() {
System.out.println("객체 생성중");
}
}
  • 생성자를 담은 클래스를 인스턴스화하여 실행시킨 메인 메소드

  
package exam;
public class Main {
public static void main(String[] args) {
//생성자를 실행 후에 객체를 생성
//클래스 인스턴스(객체) = new(힙에 저장할 공간을 생성) 사용자();
Example02 exam02 = new Example02();
}
}
  • 결과

 

2.2. 두번째 예시

생성자에 매개 변수를 여러 개 선언하여 메소드를 실행할 수 있도록 설계
  • 필드, 생성자, 메소드가 선언되어 있는 클래스 파일

  
package exam;
public class Example03 {
//필드
String a;
String b;
String c;
//기본생성자 - 생략가능
public Example03() {
}
//실행문이 존재하는 생성자 - 매개 변수는 여러 개 선언할 수 있음
public Example03(String a, String b, String c) {
//객체의 초기화 코드
this.a = a;
this.b = b;
this.c = c;
}
//메소드
void getInfo() {
System.out.println("첫번째 > " + a);
System.out.println("두번째 > " + b);
System.out.println("세번째 > " + c);
}
}
  • 인스턴스 생성 후 메소드를 실행시키는 메인 메소드

  
package exam;
public class Main {
public static void main(String[] args) {
Example03 exam03 = new Example03("A","B","C");
exam03.getInfo();
}
}
  • 결과

생성자 오버로딩

  • 클래스에서 여러 개의 생성자를 정의하되, 각 생성자가 서로 다른 매개변수 목록을 가지도록 하는 것을 의미한다.
  • 외부에서 제공되는 다양한 데이터를 사용하여 객체화하기 위해 사용된다.
  • 기본 생성자 또한 오버로딩에 속한다.
  • 특징
    • 생성자 이름이 동일: 모든 생성자는 클래스의 이름과 동일해야 한다.
    • 매개변수의 차이: 생성자 간의 매개변수의 타입, 개수, 순서가 달라야 한다.

생성자 오버로딩 예시

  • 필드, 오버로딩 형식의 생성자가 선언되어 있는 클래스 파일

  
package exam;
public class Example04 {
//필드
String a;
int b;
//기본생성자 - 생략가능
public Example04() {
}
//생성자 - 오버로딩_1
public Example04(String a, int b) {
this.a = a;
this.b = b;
}
//생성자 - 오버로딩_2
public Example04(int a, int b) {
this.a = Integer.toString(a);
this.b = b;
}
//메소드
public String toString() {
String result = "첫번째 > " + a + ", 두번째 > " + b;
return result;
}
}
  • 생성자 오버로딩을 사용하기 위한 메인 메소드

  
package exam;
public class Main {
public static void main(String[] args) {
//오버로딩_1
Example04 exam04 = new Example04("100", 25); //String,int
System.out.println(exam04.toString());
//오버로딩_2
Example04 exam04_2 = new Example04(100, 25); //int,int
System.out.println(exam04_2.toString());
}
}
  • 결과

메소드(Method)

  • 메소드는(Method)는 객체 지향 프로그래밍에서 중요한 개념입니다.
  • 특정 작업을 수행하는 코드 블록입니다.
  • 메소드는 클래스 내에 정의되며, 객체를 수행할 수 있는 행동을 나타냅니다.

메소드 선언

  • 리턴 타입 : 메소드가 리턴하는 결과 타입 표시한다.
  • 메소드 이름 : 메소드의 기능이 드러나도록 식별자 규칙에 맞게 이름을 지어준다.
  • 매개변수 선언 : 메소드가 실행할 때 필요한 데이터를 받기 위한 변수 매개변수는 없을 수도 있고 하나 이상일 수도 있다.
  • 메소드 실행 블럭 : 실행할 코드를 작성하는 곳이다.

리턴타입

  • 메소드를 실행한 후의 결과 값의 타입으로, 리턴 값 없을 수도 있습니다.
  • 리턴 값이 있는 경우 리턴 타입이 선언부에 명시되어야 합니다.

메소드 선언

  • 계산기 객체 생성(class 파일)

  
package exam;
public class calculator {
/* 메소드 - 계산기의 행동을 메소드로 선언 */
//void는 결과 값이 없을 경우 사용
void powerOn() {
System.out.println("전원을 켭니다");
}
void powerOff() {
System.out.println("전원을 끕니다");
}
//메소드 리턴 타입이 존재할 때
int add(int a, int b) { //덧셈
return a+b; //return type → int
}
int subtract(int a, int b) { //뺄셈
return a-b; //return type → int
}
int multiply(int a, int b) { //곱셈
return a*b; //return type → int
}
double divide(int a, int b) { //나눗셈
return a/b; //return type → double
}
}
  • 메인 메소드 실행

  
package exam;
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.powerOn();
/* class return type 호출 */
int add = calculator.add(2 , 5);
System.out.println(add);
int subtract = calculator.subtract(1 , 3);
System.out.println(subtract);
int multiply = calculator.multiply(5 , 10);
System.out.println(multiply);
double divide = calculator.divide(10 , 5);
System.out.println(divide);
calculator.powerOff();
}
}
  • 결과

메소드 오버로딩

  • 메소드 오버로딩(Method Overloading)은 같은 이름의 메서드를 여러 개 정의하되, 매개변수의 타입이나 개수, 순서가 다르게 하는 것을 의미합니다.
  • Java와 같은 객체 지향 프로그래밍 언어에서 오버로딩은 코드의 가독성을 높이고, 같은 기능을 수행하는 메서드를 다양한 방식으로 사용할 수 있게 해줍니다.
  • 특징
    • 메서드 이름이 동일: 오버로딩된 메서드는 같은 이름을 가집니다.
    • 매개변수의 차이: 매개변수의 타입, 개수, 순서가 달라야 한다. 반환 타입은 오버로딩에 영향을 미치지 않습니다.
    • 컴파일 타임에 결정: 어떤 메서드가 호출될지는 컴파일 타임에 결정됩니다. 즉, 메서드의 시그니처(이름 + 매개변수 정보)에 따라 선택됩니다.
  • 장점
    • 가독성 향상: 같은 기능을 수행하는 메서드가 같은 이름을 가지므로, 코드가 더 직관적이다.
    • 유연성: 다양한 데이터 타입과 매개변수 개수에 대해 같은 이름으로 메서드를 사용할 수 있어 유연한 프로그래밍이 가능하다.

메소드 오버로딩 선언

  • 계산기 객체 생성(class  파일)

  
package exam;
public class Calculator {
//계산기
/* 메소드 */
//void는 결과 값이 없을 경우 사용
void powerOn() {
System.out.println("전원을 켭니다");
}
void powerOff() {
System.out.println("전원을 끕니다");
}
...
/* 메소드 오버로딩 */
//정사각형의 넓이 , 가x세
double areaSquare(double width) {
return width * width;
}
//직사각형의 넓이 , 가x세
double areaRectangle(double width, double height) {
return width * height;
}
}
  • 메인 메소드 실행

  
package exam;
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.powerOn();
//정사각형의 넓이 , 가x세
double areaSquare = calculator.areaSquare(10);
System.out.println(areaSquare);
//직사각형의 넓이 , 가x세
double areaRectangle = calculator.areaRectangle(10, 20);
System.out.println(areaRectangle);
calculator.powerOff();
}
}
  • 결과

 


글을 마치며...

1년전 학원에서 배운 내용에서 살을 붙혀서 조금 더 자세하게 공부하게 되었습니다😌

 

상세히 작성하고자 여러번 확인했지만 헛점이 있을 수 있습니다. 그 부분 양해 부탁드립니다🙏

 

글쓴이가 작성한 글이 여러분들께 도움이 되었으면 좋겠습니다🐣

'💡BE > JAVA' 카테고리의 다른 글

반복문(for, 향상 for, forEach(), while, do-while)  (0) 2023.11.10
자바의 기본 문법  (2) 2023.11.10