JAVA

자바 기초 문법 다지기 2

도원좀비 2025. 2. 25. 21:02

클래스(class)란?

객체(object)를 만들 때 필요한 청사진(설계도)이다.

 

객체(object)란?

실제로 존재하는 것

  • 컴퓨터, 계산기, 자동차 등 과 같은 사물들이 객체
  • 어떤 개념이나 논리 또한 객체(ex.덧셈 뺄셈 등)

클래스 구조

class 클래스 {

		// 1. 속성
		
		// 2. 생성자
		
		// 3. 기능
}

 

속성

  • 객체의 데이터(상태) 를 저장하는 변수
  • 예: String name;, int age;

생성자

 

  • 객체가 생성될 때 초기화 하는 역할
  • 클래스 이름과 동일한 메서드이며, 반환 타입이 없음

 

기능

  • 객체의 동작(행위) 를 정의하는 함수

클래스 = 속성(데이터) + 생성자(초기화) + 기능(동작)

 

게터(getter) : 클래스의 속성을 가져올 때 사용되는 기능을 의미

세터(setter): 객체의 속성을 외부에서 설정할 수 있게 해주는 기능

 

JVM 메모리 구조

  • Method Area(도서관 비유)
    • 프로그램 시작 시 정보가 저장됩니다.
    • 클래스 정보(.class 파일) 가 올라가는 곳.
    • 클래스의 메서드 정보, static 변수 등이 저장됩니다.
    • 모든 객체가 공유하는 공용 공간
  • Stack Area(접시 쌓기 비유)
    • 가장 위에 있는 접시를 먼저 꺼내듯 비슷한 구조로 생각하시면 됩니다.
    • 선입후출(LIFO) 구조 입니다. 먼저 들어온 것이 가장 늦게 나간다는 뜻입니다.
    • 메서드가 호출될 때마다 새로운 접시한장(스택프레임)이 쌓입니다.
    • 가장 위의 접시(최근 호출된 메서드)가 먼저 실행됩니다.
    • 메서드 실행이 끝나면 스택에서 제거됩니다.
  • Heap Area(풍선 비유)
    • new 키워드로 생성된 객체가 저장되는 곳입니다.
    • 객체의 실제 데이터가 저장되고 데이터의 주소는 stack 영역에 저장됩니다

 

래퍼클래스(Wrapper Class)란?

기본 자료형을 객체로 감싸는 클래스

기본 자료형 래퍼 클래스
byte Byte
short Short
int Int
long Long
float Float
double Double
char Char
boolean Boolean

래퍼 클래스를 사용하는 이

  • 기본형은 객체처럼 속성, 기능을 가질 수 없습니다.
  • 하지만 객체는 기능을 제공할 수 있습니다.
  • 기본형을 감싼 객체를 만들어 기능을 제공하면 편리하게 데이터처리를 할 수 있습니다.
Integer num = 123; // 래퍼클래스
String str = num.toString(); //  편리한 기능

int a = 100; // 그냥 데이터 100
String str = a.toString(); //  변환 불가

 

 

Static이란?

  • static 키워드는 모든 객체가 함께 사용하는 변수나 메서드를 만들 때 사용
  • 객체를 만들지 않아도 클래스 이름만으로 바로 사용 가능
  • 모든 객체가 같으 값을 공유
  • static변수와 메서드는 한 번만 생성되고 메서드영역에 저장
class Person {
		//  static 변수
		static int population = 0; 
		
		//  static 메서드
		static void printPopulation() { 
				System.out.println("현재 인구 수: " + population);
		}
}

public class Main {
    public static void main(String[] args) {
        
        Person p1 = new Person(); // p1 객체 생성
        p1.name = "seokhyeon"; // p1 객체의 데이터에 접근
        
        Person p2 = new Person(); // p2 객체 생성
        p2.name = "Jungseokhyeon"; // p2 객체의 데이터에 접근
    }
}

 

인스턴스 메서드란?

  • 객체의 속성을 활용하는 메서드
  • 객체가 생성된 후에만 사용 가능
class Person {
		String name;
		
		void printName() { //  인스턴스 메서드
				System.out.println("나의 이름은 " + this.name + "입니다.");
		}
}

public class Main {
    public static void main(String[] args) {
        
        Person p1 = new Person(); 
        p1.name = "seokhyeon";
        p1.printName(); //  p1 객체의 메서드 실행
        
        Person p2 = new Person();
        p2.name = "jungseokhyeon";
        p2.printName(); //  p2 객체의 메서드 실행
    }
}

 

클래스 멤버란?

  • 클래스 변수 + 클래스 메서드
  • 클래스 자체에 속하는 변수와 메서드를 의미
  • static 키워드를 사용해서 선언합
  • 해당 클래스로 만들어진 객체가 공유해서 사용 가능
  • 클래스가 로드될때 메서드 영역에 적재
  • 객체 생성 없이 사용 가능
속성 설명
클래스 변수
  • 클래스가 로드될 때 한 번만 생성
  • 모든 객체가 공유하는 변수
  • Heap 이 아니라 Method Area 에 저장
  • 객체를 만들지 않아도 클래스명.변수명으로 접근가능
클래스 메서드
  • 클래스에 속하는 메서드
  • 객체 없이 사용 가능
  • 클래스 변수만 사용할 수 있고 인스턴스 변수는 사용 불

 

Final 란?

  • 1. 변수는 변경이 불가능하게 만듭니다.변수에서 final
    • 변수에 final 을 붙이면 변수를 한 번만 설정할 수 있습니다.
  • 2. 클래스는 상속할 수 없게 만듭니다.클래스에서 final
    • final 로 선언된 클래스는 상속할 수 없습니다.
  • 3. 메서드는 수정할 수 없게 만듭니다.(오버라이딩 불가)메서드에서 final
    • final 로 선언된 메서드는 오버라이딩 할 수 없습니다.
class Parent {
    final void show() {
        System.out.println("Hello from Parent");
    }
}

class Child extends Parent {
		
		@Override
    void show() { // final 메서드를 재정의할 수 없음
        System.out.println("Hello from Child");
    }
}

 

상수(constant)

  • 상수는 변하지 않고 항상 일정한 값을 갖는 수
  • Java에서 상수는 대문자로 표현하는 것이 관례
  • 프로그램 실행중에 절대 변경되서는 안되기 때문에 static final 키워드를 사용해 선언

 

불변객체(Immutable Object)

  • 불변객체는 내부 상태를 변경할 수 없는 객체
  • final 을 속성(property, field) 에 활용
  • 세터(setter) 없이 설계
  • 변경이 필요할 경우 새로운 객체를 만들어야 
  • 예) String , Integer , 래퍼클래스 등

 

인터페이스(interface)란?

  • 인터페이스는 설계 표준
  • 클래스가 따라야할 최소한의 공통 규칙을 정의하는 역할
    • 클래스에서 implements 키워드로 인터페이스를 활용 가능
    • 인터페이스를 구현한 클래스를 구현체라고 
interface Car {
    void drive();
    void stop();
}



class LuxuryCar implements Car {

		@Override
    void drive() { // 인터페이스 규칙 준수
        System.out.println("멋지게 이동합니다."); // 구현 내용은 자유롭습니다.
    }
    
    @Override
    void stop() { // 인터페이스 규칙 준수
		    System.out.println("멋지게 정지합니다."); // 구현 내용은 자유롭습니다.
	  }
	  
	  void charge() { // 🎉 CarA 만의 기능을 확장 가능합니다.
			  System.out.println("차량을 충전합니다");
	  }
}



public class Main {
    public static void main(String[] args) {
        LuxuryCar car1 = new LuxuryCar();
        SpeedCar car2 = new SpeedCar();

				// 각 차량의 공통 기능
        car1.drive();
        car1.stop();
        car2.drive();
        car2.stop();
        
        // 각 차량의 고유 기능
        car1.charge();
        car2.autoParking();
    }
}

 

속성 설명
인터페이스 다중구현
  • implements 키워드로 다수의 인터페이스를 구현할수 있습니다.
  • 한 개의 클래스가 여러 인터페이스(Animal , Flyable)를 구현한 경우 다중구현 이라고 합니다.
인터페이스 다중상속
  • 인터페이스는 추상 메서드만 포함하므로 충돌 문제가 없음
  • 다중 상속의 문제(충돌, 복잡성)를 해결하면서도, 유연한 설계 가능

 

캡슐화 (Encapsulation) 란?

  • 객체의 정보를 외부에서 직접 접근하지 못하게 보호하는 개념
  • 캡슐처럼 감싸서 내부를 보호하고 외부로부터 내용물을 숨기고 있는 모습에서 유래
  • 클래스 혹은 객체의 캡슐화는 접근제어자 를 통해서 구현 가

접근제어자(Access Modifier)

  • 접근제어자는 클래스, 변수, 메서드, 생성자의 접근 범위를 제한하는 키워드
  • 캡슐화 구현을 위해 사용

 

접근제어자 클래스 내부 패키지 내부 상속한 클래스 전체 공
public
protected
default
private

 

게터(Getter)와 세터(Setter)

 

캡슐화가 된 데이터에 접근 방법

  • 캡슐화가 잘 적용된 클래스는 내부 데이터를 private 으로 보호하고 있습니다.
  • 데이터 조회나 변경이 필요한 경우 안전한 접근방법이 필요합니다.
  • 그 역할을 수행하는 메서드가 바로 게터(Getter)와 세터(Setter) 입니다

게터 활용법

public class Person { 
    private String secret;
    
    public String getSecret() {
		    return this.secret; //  객체의 secret 속성 반환
    }
}

public class Main {
    public static void main(String[] args) {
		    Person p1 = new Person();
		    p1.secret; //  직접 접근 불가능
		    String newSecret = p1.getSecret(); //  게터를 활용해 접근가능
    }
}

 

세터 활용법

public class Person { 
    private String secret;
    
    public void setSecret(String secret) {
		    this.secret = secret; //  secret 속성 설정 및 변경
    }
}

public class Main {
    public static void main(String[] args) {
		    Person p1 = new Person();
		    p1.secret = "password"; //  직접접근, 변경 불가능
		    p1.setSecret("newPassword"); //  세터를 활용해 접근, 변경가능
    }
}

'JAVA' 카테고리의 다른 글

자바 기초 문법 다지기 4  (1) 2025.02.26
자바 기초 문법 다지기 3  (1) 2025.02.26
자바 기초 문법 다지기3  (0) 2025.02.26
자바 기초 문법 다지기  (2) 2025.02.24
조건문  (0) 2025.02.20