2024.08.29 - Java 05 클래스와 객체 1

한덕용·2024년 9월 5일

chunjaeFullstack

목록 보기
13/14

클래스와 객체




객체란?

  • 객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중 자신의 속성을 가지고 있으면서 식별 가능한 것을 의미.
  • 자바는 객체 지향 프로그래밍으로 객체 사이에 일어나는 일을 프로그램으로 구현한 것.
  • 객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 됨


클래스란?

  • 자바에서 클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용
  • 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성
    • 필드(field) : 클래스에 포함된 변수(variable)를 의미
    • 메소드(method) : 어떠한 특정 작업을 수행하기 위한 명령문의 집합
    • 인스턴스(instance) : 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 하고 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 함


객체지향의 4가지 특성과 5가지 원칙


객체지향의 4가지 특성

  1. 추상화 : 객체의 공통적인 속성과 기능을 추출하여 정의하는것을 의미
    • 단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙
  2. 상속 : 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소
    • 단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙
  3. 다형성 : 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미
    • 단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙
  4. 캡슐화 : 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것
    • 단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙

객체지향의 5가지 원칙 (S O L I D)

  1. SRP (Single Responsibility Principle) 단일 책임 원칙
    • 단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙
  2. OCP (Open-Closed Principle) 개방-폐쇄 원칙
    • 추상화 사용을 통한 관계 구축을 권장을 의미
  3. LSP (Liskov Substitution Principle) 리스코프 치환 원칙
    • 단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙
  4. ISP (Interface Segregation Principle) 인터페이스 분리 원칙
    • 단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙
  5. DIP (Dependency Inversion Principle) 의존 역전 원칙
    • 단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙

SOLID는 Java 과정을 좀 더 배우고 다시 공부해 보라는 강사님 말씀에 일단 기본적인 개념들만 적어보았다. 사실 지금은 무슨 소리인지 잘 이해가 가질 않는다..





클래스 작성방법

package 패키지이름

접근 제어자 class 클래스이름 {
	property;
    method;
}

ex)

package test;

public class TestClass {
	int a;
    int b;
    String c;
    String d;
}

패키지란?


클래스 파일의 묶음.
패키지를 만들면 프로젝트 하위에 디렉터리가 생성됨.
계층 구조를 가질 수 있다.

위 코드에 패키지를 선언했으니 코드는 스킵.


메서드란?


어떠한 특정 작업을 수행하기 위한 명령문의 집합

자바는 함수보다는 메서드를 표준으로 부른다.


package test;

public class TestClass {
	int a;
    int b;
    String c;
    String d;
}

public void showTest () {
	System.out.println("TestClass" + a + b + c + d);
} // 요게 메서드

메서드 정의하는 방법

(접근제어자)   void/리턴할 자료의 형태   함수명(매개변수) {
	return 자료형의 값
}

ex)

int testFunction (int num1, int num2) {
	return num1 + num2;
}

항상 쓰던 함수와 같다. 확실히 어떤 언어든 하나라도 해본다면 다음 언어를 공부할 때 많은 도움이 되는 것 같다.

반환값이 없는 메서드

void testFunctionV (String strr) {
	System.out.println(strr);
    return;
}

void : 비어있다는 의미
함수 안 로직만 실행됨.

메서드 사용법

package test;

public class test {

	public static void main(String[] args) {
		int num1 = 1;
        int num2 = 2;
        
        int sum = add(num1, num2);
        System.out.println(num1 + "+" + num2 + " = " + sum);
	}
	
    public static int add(int n1, int n2) {
    	return n1 + n2;
    }
}

결과
1 + 2 = 3



클래스와 인스턴스


main() 함수

main함수는 자바 가상main함수는 자바 가상 머신(Java Virtual Machine : JVM)이 프로그램을 시작하기 위해 호출하는 함수

main()함수에서 클래스를 사용하는 방법

  1. 클래스 내부에 main() 함수를 만드는 것
  2. 외부에 테스트용 클래스를 만들어 사용하는 것

1. 클래스 내부에 main() 함수를 만드는 것

package test;

public class TestClass {
	int a;
	int b;
	String c;
	String d;

	public String getC() {
		return c;
	}

// 내부에 main 함수 생성
	public static void main(String[] args) {
		TestClass testGen = new TestClass();
		testGen.c = "ccc";

		System.out.println(testGen.c);
		System.out.println(testGen.getC());
	}
}


2. 외부에 테스트용 클래스를 만들어 사용하는 것

// 클래스 생성
package test;

public class TestClass {
	int a;
	int b;
	String c;
	String d;

	public String getC() {
		return c;
	}
}


// 외부 클래스에 main 함수 생성
package test;

public class TestClassTest {
	public static void main(String[] args) {
		TestClass testGen = new TestClass();
		testGen.c = "ccc";

		System.out.println(testGen.c);
		System.out.println(testGen.getC());
	}
}
  • 패키지가 다르다면 import 문을 사용해서 원하는 클래스를 불러와야 함.

인스턴스와 참조 변수


객체란 의사나 행위가 미치는 대상이고 이를 코드로 구현한 것이 클래스다.
그리고 클래스가 메모리 공간에 생성된 상태를 인스턴스라고 함.
또한, 생성된 클래스의 인스턴스를 객체라고도 한다.



  • 객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
  • 클래스 : 객체를 프로그래밍하기 위해 코드로 만든 상태
  • 인스턴스 : 클래스가 메모리에 생성된 상태
  • 멤버 변수 : 클래스의 속성, 특성
  • 메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현
  • 참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
  • 참조 값 : 생성된 인스턴스의 메모리 주소 값
참조 & 출저

TCPSCHOOL
CODEBLOG
InpaDev
InpaDev

profile
장래희망개발자

0개의 댓글