[Java] 클래스와 객체(Class & Object)

u_yonu·2026년 1월 27일

Java

목록 보기
6/18
post-thumbnail

이제 슬슬 어려워집니다... 마음의 준비를 해주세요


함수

  • 특정 작업을 수행하는 코드블록
  • 반복적으로 사용되는 코드를 재사용 가능하게 만들어 가독성유지 보수성을 향상 시킴

함수의 정리

  • 특정 작업을 수행하는 코드 블록에 이름을 붙인 것
  • 실행 가능한 단위
  • 함수의 구성 요소 : 반환타입(또는 void), 함수이름, 매개변수, 함수 내용
  • return 구문은 반환 타입이 void인 경우 생략이 가능

    ex) 함수의 예시
int add(int a, int b){
	return a+b
}
void printHelloWorld (){
	System.out.println("Hello, World!")
}

클래스(Class)

  • 관련 있는 변수(필드)와 함수(메서드)를 묶어서 묶어서 만든 사용자 정의 자료형(데이터 타입)
  • 객체를 생성하기 위한 설계도(Blueprint)
  • 클래스를 통해 생성된 객체 -> 인스턴스(Instance)

클래스 구성 요소

  1. 필드(Field)
    • 클래스에 선언된 변수 (멤버 변수, 멤버 필드)
    • 클래스의 속성을 정의 -> 각 인스턴스는 필드에 고유한 값을 가질 수 있음

cf) 필드의 변수는 초기화를 하지 않더라도 사용할 수 있음
ex) 인스턴스 생성 -> 초기화 X-> String Null, int 0

  1. 메서드(Method)
    • 특정한 동작을 수행하는 코드 블록(객체의 행동을 정의)
    • 입력(매개변수)를 이용하여 처리하고 결과(반환 값)를 반환
    • 오버로딩 가능
  2. 생성자(Constructor)
    객체 생성 시 호출되는 특별한 메서드(필드 초기화 또는 생성시 필요한 작업 수행)
    클래스 이름과 같고, 반환타입이 없음

생성자(Constructor)

  • 객체 생성 시 호출되는 특별한 메서드(필드 초기화 또는 생성시 필요한 작업 수행)
  • 클래스 이름과 같고, 반환타입이 없음(void 작성 X)
  • new 키워드와 함께 호출하여 객체 생성
  • 객체 생성 시 반드시 호출 되어야함
  • 기본 생성자(매개 변수가 없음)를 자동으로 제공(생성자 미 작성 시)
  • 매개변수의 개수가 다르거나, 자료형이 다른 여러개의 생성자가 있을 수 있음(생성자 오버로딩)
  • 생성자의 첫번째 라인으로 this() 생성자를 사용하여 또 다른 생성자를 하나 호출 가능

기본 생성자

  • 매개 변수가 없는 생성자
  • 개발자가 따로 정의하지 않으면 컴파일러가 자동으로 추가
  • 생성자가 하나라도 정의되어있으면 기본 생성자를 추가하지 않음

매개변수 생성자

  • 매개 변수를 받아 객체를 초기화 하는 생성자
  • 생성자 호출 시 인자를 넘겨주어야 함
  • 작성 시 컴파일러는 기본 생성자를 작성하지 않음

생성자 오버로딩

  • 같은 이름의 생성자를 매개 변수의 개수나 타입이 다르게 여러 개 정의
  • 매개 변수의 타입, 개수, 순서 등이 달라야함

키워드 : this

  • 매개변수 이름과 필드 이름이 같은 경우, 필드를 구분하기 위해서 사용(다르면 생략가능)
  • 참조 변수로써 현재 인스턴스 자기 자신을 가리킴
  • static 영역에서 사용 불가능

키워드 : this()

  • 해당 키워드를 통해 같은 클래스의 다른 생성자를 호출
  • 같은 클래스 내에서만 호출 가능
  • 반드시 생성자의 첫번째 줄에 위치
  • 중복 코드를 제거하거나, 생성자 체인을 통해 간결하고 유지보수하기 쉬운 코드 작성에 도움을 줌

객체지향 프로그래밍(OOP, Object Oriented Programming)

  • 객체 : 의사나 행위가 미치는 대상, 작용의 대상 / 세상의 모든 사물, 개념(유/무형) 등
    => 현실 세계에서 식별 가능하고, 상태를 가지며, 어떤 행동의 주체 또는 대상이 되는 모든 것을 객체로 볼 수 있음
  • 객체(Object) : 데이터와 관련된 알고리즘(메서드)를 하나의 단위로 묶어 놓은 것
  • 객체 모델링 : 현실세계의 객체를 SW객체로 설계하는것

객체지향 프로그래밍 장점

  1. 모듈화 된 프로그래밍 가능
  2. 재사용성 증가

객체지향 프로그래밍 특징(A PIE)

1. 추상화(Abstraction)
정의 : 객체 지향 프로그래밍에서 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 말함.(복잡한 시스템 -> 핵심적인 개념 / 기능의 분리)
** JAVA에서는 주로 Abstract class와 interface로 구현됨
핵심 가치 : 복잡한 시스템을 단순화하여 설계 생산성을 높이고, 실제 구현체와 사용자가 상호작용하는 규격(인터페이스)을 분리

2. 다형성(Polymorphism)
정의 : 하나의 참조 변수가 여러 타입의 객체를 참조할 수 있거나, 동일한 이름의 메서드가 상황에 따라 다르게 동작하는 성질
** JAVA 구현 : 오버라이딩(Overriding), 오버로딩(Overloading), 그리고 부모 타입 변수로 자식 인스턴스를 참조하는 업캐스팅(Upcasting)을 통해 구현
핵심 가치 : 코드의 유연성과 확장성을 극대화하며, 구체적인 타입에 의존하지 않는 범용적인 프로그래밍을 가능하게 함.

3. 상속(Inheritance)
정의 : 이미 정의된 부모 클래스의 모든 속성과 기능을 자식 클래스가 물려받아 사용하는 것을 말함.
** JAVA에서는 extends 키워드를 사용하여 구현하는데, 실제 단일 상속만을 지원함
핵심 가치 : 기존 코드를 재사용하여 새로운 클래스를 빠르게 작성할 수 있으며, 클래스 간의 계층 구조를 형성하여 다형성의 기반이 됨

4. 캡슐화(Encapsulation)
정의 : 서로 연관된 데이터(필드)와 함수(메서드)를 하나의 단위로 묶고, 외부로부터의 직접적인 접근을 제한
** JAVA에서는 private, protected, public 같은 접근 제어자를 활용하며, Getter / Setter메서드를 통해 데이터 접근

profile
비전공자의 개발도전기

0개의 댓글