[Java] 객체와 class_OOP

2024. 11. 10. 16:50·Java/OOP

 

 

 

Java는 객체 지향 언어의 대표적인 언어이다.

 

객체 지향 언어는 OOP (Object Oriented Programming)의 약자로. 

프로그램 개발하는 방법론 중 하나이다.

 

객체 지향 프로그래밍은 새로운 기능의 추가나 수정에 용이하다 이유는 객체 단위로 프로그램이 구성되어 있기 때문이다.

 

유지보수가 편해지고 가독성을 높아진다.

 

 

객체지향이 어려운 이유 중 하나가 다양한 용어가 등장하기 때문이다.

 

 

 


 

 

 

객체 지향을 쓰는 이유

 

만약 자동차 관련된 정보로 코딩한다고 치자,

 

자동차의 차종, 가격, 엔진 정보에 대해 처리한다고 가정하고,

 

Sonata는 24000000원이고, 6500.5의 힘을 지님 이런 식으로 콘솔창에 출력을 한다고 하자.

 

 

 

String[] carName = {"Sonata", "Casper", "Avante"};
int[] price = {24_000_000, 15_000_000, 18_000_000};
double[] enginePower = {6500.5, 5000.5, 6250.8};

 for (int i = 0; i < carName.length; i++) {
	System.out.println(carName[i] + "는 " + price[i] + "원이고, " + enginePower[i] + "의 힘을 지님");
}

 

 

배열과 반복문으로 쉽게 출력조건에 맞게 출력할 수 있다.

 

여기서 만약 새로운 차종이 추가되면 각 배열마다 순서에 맞게 차종, 가격, 엔진정보에 대해 최신화시켜야 한다.

 

배열에 저장된 차종이 100개 넘는다고 치면, 차종의 가격에 대해 수정하거나 차종을 배열에서 제거할 때 다른 배열들도 정확히 똑같은 index 정보도 수정해야 하므로 쉽지 않은 유지보수가 될 수 있다.

 

 

다시 말해 객체를 사용하지 않는 코드는 사람 입장에서는 유지보수가 힘들다.

 

만약 저렇게 차 정보에 대해 따로따로 배열로 저장하는 게 아니라, 차자체를 하나의 정보로 저장하면 더 쉬울 것이다.

 

이 기능이 객체가 도와준다.

 

 

즉, 차라는 개념을 따로 만드는 것이다.

 

 


 

 

 

클래스 선언과 관례

 

 

클래스의 선언은 쉽다.

 

class 클래스이름{} 

이게 클래스의 선언이다.

 

 

 

위 코드에 해당되는 자동차라는 클래스를 만들어보자.

 

class Car{

}

 

 

클래스를 선언하고 컴파일했으면. class파일이 만들어지면서 컴파일된다.

 

 

 

 

 

클래스 이름 작성 규칙은 낙타 표기법을 사용한다. 관례 상 첫 글자는 대문자이다.

예) Student, CarInfo, Math

 

 

 

 

하나의 java 파일에 두 개 이상의 클래스를 선언할 수 있다.

 

. class는 클래스 개수만큼 컴파일 시 생성한다.

 

 

주의할 점은 public class는 java파일 이름과 public class이름과 무조건 동일해야 한다.

 

 

public class H{

}

class Test{

}

 

 

 

 

 

 

 

클래스 선언 결론

  java파일의 여러 개의 class를 선언할 수 있다.

  public class의 이름은 반드시 java파일 이름과 동일해야 한다.

  class 작성 관례는 첫 글자는 대문자, 낙타표기법을 사용해 단어를 구분한다.

 

 


 

 

클래스 생성 

 

이제 클래스 선언이 아닌 선언한 클래스를 생성하는 방법에 대해 알아보자.

 

클래스로부터 객체를 생성하는 방법은 new 키워드를 사용하는 것이다.

 

new 클래스이름();

 

new 클래스이름()을 사용하면 자바에서 class를 메모리 내 힙 영역에 생성하게 된다.

 

힙 영역에 생성된 객체(인스턴스)는 객체 주소를 통해 접근할 수 있다.

 

객체 주소는 참조변수에 넣는다. 참조변수를 통해 객체에 접근할 수 있게 된다.

참고로 참조변수는 스택영역에 추가된다. (그냥 평범한 변수일뿐)

 

 

결론적으로 용어 정리 한번 해보겠다.

class는 객체를 생성하기 위한 틀이고

객체는 클래스에 정의된 속성과 메서드를 실제로 구현하기 위한 것이다. 

 

즉, class로 틀을 만들고 객체를 통해 class에 있는 속성들을 접근한다.

 


 

class CarInfo{
    String carName;
    int price;
    double enginePower;
}
public static void main(String[] args) {
	CarInfo ci = new CarInfo();		//ci변수는 참조변수 CarInfo 객체 주소를 가지고 있음
   
}

 

CarInfo 클래스 객체를 new 키워드로 힙영역에 생성하였다.

CarInfo 객체주소는 ci라는 참조변수에 저장했고, ci 참조변수를 통해 CarInfo 객체에 접근할 수 있게 된다.

 

  

System.out.println(ci)

참조변수 ci의 값은 뭘까?

 

CarInfo를 참조하기 위한 객체주소라는 것을 확인할 수 있다.

@앞은 패키지와 class이름, @뒤는 참조값이다. 참조값은 참고로 16진수이다.

 

 

 

결론

  붕어빵에 비유해 class와 객체(인스턴스)를 비교해 보자.

  붕어빵을 만들기 위한 붕어빵 틀(설계도)을 class라고 한다.

  붕어빵 틀에서 만들어진 붕어빵을 객체(인스턴스)라고 한다.

 

  즉, 클래스는 설계도 같은 느낌이고 설계도를 통해 직접 무언가를 만드는 게 객체(인스턴스)이다.

  클래스를 통해 사용자가 원하는 데이터 타입을 만들 수 있게 되었다.

 

 

 

 


 

클래스 내에 정의한 변수와 메서드

 

 

클래스 선언할 때 만든 변수들을 멤버 변수(필드)라고 부른다.

 

class CarInfo{
    String carName;
    int price;
    double enginePower;
}

CarInfo 클래스에서 멤버 변수(필드)는 총 3개다 String타입의 carName, int타입의 price, double타입의 enginePower이다.

 

클래스에서 변수 말고 함수도 정의할 수 있다. Java에서 함수를 메서드라고 부른다.

 

 

class CarInfo{
    String carName;
    int price;
    double enginePower;

    double checkSpeed(){
        return 0d;
    }
}

 

 

CarInfo 클래스의 멤버변수는 3개 메서드는 1개라는 것을 확인할 수 있다.

 

 

결론

  클래스 안에 변수를 멤버 변수 혹은 필드라고 부른다.

  클래스 내에 정의된 함수는 메서드라고 부른다.

  멤버 변수와 메서드는 개수 상관없이 계속 만들 수 있다.

 

 

 

 

'Java > OOP' 카테고리의 다른 글

절차 지향 프로그래밍VS객체 지향 프로그래밍  (1) 2024.11.20
[Java] Argument로 참조값을 보내면?  (0) 2024.11.16
[Java] 기본형vs참조형  (4) 2024.11.15
[Java] 객체 배열  (0) 2024.11.13
[Java] 객체 사용 방법 (OOP)  (0) 2024.11.11
'Java/OOP' 카테고리의 다른 글
  • [Java] Argument로 참조값을 보내면?
  • [Java] 기본형vs참조형
  • [Java] 객체 배열
  • [Java] 객체 사용 방법 (OOP)
oneH
oneH
  • oneH
    Hello WeonHyeok!
    oneH
  • 전체
    오늘
    어제
    • 분류 전체보기 (50)
      • CSS (1)
      • Javascript (5)
        • JS자료구조,알고리즘 (1)
      • Java (22)
        • OOP (9)
      • JSP (1)
      • Computer Network (2)
      • 이론 컴퓨터 (2)
      • Project (0)
      • Algorithm&Data Structure (11)
      • 데이터베이스 (3)
      • Spring,SpringBoot (1)
      • Git & GitHub (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Git
    math
    Algorithm
    오블완
    JS
    이진검색
    티스토리챌린지
    Java
    SQL
    컴퓨터 네트워크
    JavaScript
    OSI7계층
    자바
    프로토콜
    object
    스택
    선택자
    복사
    폰노이만 아키텍쳐
    덱
    combinators
    컴퓨터구조
    Selector
    컴파일
    MySQL
    큐
    OOP
    Stack
    선형 큐
    컴퓨터네트워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
oneH
[Java] 객체와 class_OOP
상단으로

티스토리툴바