Java (3)

Tony Kim·2021년 8월 26일

Java

목록 보기
3/5
post-thumbnail

Java (3) : class, object, method, instance

1. 객체?

객체 (Object)
의사나 행위가 미치는 대상 (사전적 의미)
구체적, 추상적 데이터의 단위 (학생, 회원, 생산, 주문, 배송)

객체지향프로그래밍 VS 절차지향프로그래밍

1) 객체지향 : 객체들의 상호작용
2) 절차지향 : 시간이나 사건의 흐름에 따른 프로그래밍

객체 찾는법
온라인 쇼핑몰회원 로그인을 하고 여러 판매자가 판매하고있는 제품 중 하나를 골라 주문

-> 클래스는 객체의 청사진(blueprint)

ex) 객체 order

public class Order {
ㅤ
	int orderId;
	String buyerId;
	String sellerId;
	int productId;
	String orderDate;
}

객체 내 속성 = 클래스의 멤버변수

string은 기본 자료형 아니고 클래스 (이름 주소) 변수로 클래스 사용가능

public : 어디서든 접근 가능, 1개만 가능, java파일명과 public class 명은 동일해야함

package ch01;          // 소문자가 좋음
ㅤ
**(대소대소)**
public class Student  {   // 대문자가 좋음, 만약 추가된다면 StudentInfo 
ㅤ
**(소대소)**
  int studentNumber ; // 멤버변수, public private 등 사용가능, 변수나 메소드는 
  String studentName;
  int majorCode;
  String majorName;
  int grade;
}
ㅤ
public class Order {ㅤ
  int orderId;
  String buyerId;
  String sellerId;
  int productId;
  String orderDate;
}
ㅤ
public class UserInfo {
   String userId;
   String userPassword;
   String userName;
   String address;
   int phoneNumber;
}




2. 함수와 메서드

함수와 메서드

  • 하나의 기능을 수행하는 일련의 코드
  • 구현된(정의된) 함수는 호출하여 사용하고 호출된 함수는 기능이 끝나면 제어가 반환됨
  • 함수로 구현된 하나의 기능은 여러곳에서 동일한 방식으로 호출되어 사용될 수 있음
int add(int num1, int num2) {
  int result;
  result = num1 + num2;
  return result;
}

함수는 이름, 매개변수, 반환값, 함수몸체로 구성

반환 없는 경우 : void add() {}

ex)

public class FunctionTest {
ㅤ
public static int addNum (int num1, int num2) {
  int result; 
  result = num1 + num2;
  return result;
}
ㅤ
public static void sayHello(String greeting) {
    System.out.println(greeting);
}
ㅤ
public static int calcSum()
{
  int sum = 0;
  int i;
  for (i = 0; i<=100; i++) {
     sum += i;
  }
  return sum;
}
ㅤ
public static void main(Stirng[] args) {
ㅤ
  int n1 = 10;
  int n2 = 20;
 ㅤ
  addNum(n1, n2);
  System.out.println(total);
ㅤ
  sayHello (“안녕하세요”)
   ㅤ
  total = calcSum();
  System.out.println(total);
}

함수호출과 스택메모리

스택 : 함수가 호출될 때 지역변수들이 사용하는 메모리
함수의 수행이 끝나면 자동으로 반환되는 메모리

함수 vs 메서드
함수 : 단독모듈, 어디 속하지 않음
메서드 : 함수의 일종이지만, 클래스 안에 속해있고, 클래스 안의 변수들을 활용하는 함수
= 멤버펑션 (member function) in C++

-> 메서드를 구현함으로써 매체의 기능이 구현됨
-> 메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는 것이 좋음
ex) getStudentName()

ex)

package ch04;
ㅤ
public class Student {
ㅤ
   public int studentID;
   public String studentName;
   public String address;
ㅤ
   public void showStudentInfo() {
     System.out.println ( StudentID + “학번 학생의 이름은” + studentName + “이고, 주소는 “ + address + “입니다”);
}
ㅤ
  public String getStudentName () {
 ㅤ
    return studentName;
  }
  ㅤ
  public void setStudentName(String name) {
  ㅤ
  studentName = name;  } }

해당 클래스를 사용해보자

package ch04;
ㅤ
public class StudentTest {
ㅤ
  public static void main (String[] args) {
ㅤ
    Student studentLee = new Student();  // 인스턴스
    studentLee.studentID = 12345;
    studentLee.setStudentName(“Lee”);
    studentLee.address = “서울 강남구”;
  ㅤ
    studentLee.showStudentInfo ();
ㅤ
    Student studentKim = new Student();  // 인스턴스
    studentKim.studentID = 54321;
    studentKim.setStudentName(“Kim”);
    studentKim.address = “경기도 성남시”;
ㅤ
    studentKim.showStudentInfo ();
  }
}




3. 인스턴스

인스턴스
• 클래스는 객체의 속성을 정의 하고, 기능을 구현하여 만들어 놓은 코드 상태

• 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 됨
-> 가령, 학생의 클래스에서 생성된 각각의 인스턴스는 각각 다른 이름, 학번, 학년등의 값을 가지게 됨

• new 키워드를 사용하여 인스턴스 생성

힙 메모리
• 생성된 인스턴스는 동적 메모리(heap memory) 에 할당됨
• C나 C++ 언어에서는 사용한 동적 메모리를 프로그래머가 해제 시켜야 함 ( free() 난 delete 이용) *참고_ C++ 은 new / C 는 malloc (동적 메모리)로 생성
• 자바에서 Garbage Collector 가 주기 적으로 사용하지 않는 메모리를 수거
• 하나의 클래스로 부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 됨

    Student studentKim = new Student();  // 인스턴스
    studentKim.studentID = 54321;
    studentKim.setStudentName(“Kim”);
    studentKim.address = “경기도 성남시”;
ㅤ
    studentKim.showStudentInfo ();

studentLee 는 중괄호{} 안에 선언 / 자료형 (type) Student / 변수 studentLee / new Student로 값을 할당

system.out.println(studentKim);
-> 값 : ch04.Student@36sdq23~ : 주소가 뒤에 숫자와 알파ㅤ벳
ㅤ
JBM이 assign
heap메모리에 할당

studentLee : 참조 변수 (reference variable)
메모리 어드레스 (주소, 36어쩌구) : 참조 값 (reference value)


용어정리 (교재)

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


용어정리 (인터넷)

1) 클래스와 객체

  • 클래스의 정의 : 객체를 정의해 놓은 것
  • 클래스의 용도 : 객체를 생성하는데 사용
  • 객체의 정의 : 실제로 존재하는 것 (사물 또는 개념)
  • 객체의 용도 : 객체의 속성과 기능에 따라 다름
  • 클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통해서 제품을 만드는 이유와 같다.
  • 하나의 설계도만 잘 만들어 놓으면 제품을 만드는 일이 쉬워지는 것과 같기 떄문이다.
  • JDK에서는 많은 수의 유용한 클래스(API)를 기본적으로 제공하고 있다.

2) 객체와 인스턴스

  • 객체는 인스턴스를 포함하는 일반적인 의미
  • 인스턴스화 : 클래스로부터 인스턴스를 생성하는 것
  • 클래스 > 인스턴스화 > 인스턴스(객체)

3) 객체의 구성요소

  • 객체는 다수의 속성과 다수의 기능 두 종류의 구성요소로 이루어진다.
  • 객체는 속성과 기능의 집합이며, 속성과 기능을 객체의 멤버라고 한다.
  • 속성(Property) : 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)
  • 기능(function) : 메서드(method), 행위(behavior), 함수(function)

4) 인스턴스의 생성

  • 클래스명 참조변수명 = new 클래스명();
  • 클래스의 객체를 참조하기 위한 참조변수를 선언하고 객체를 생성 후, 객체의 주소를 참조변수에 저장한다.
  • 인스턴스 초기화 : 인스턴스 변수에 적절한 값을 저장하는 것이다.

5) 생성자(Constructor)

  • 클래스이름(타입 변수명, 타입 변수명) { // 인스턴스 생성시 수행될 코드 }
  • 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메소드' 이다.
  • 인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용한다.
  • 몇가지 조건을 제외하고는 메서드와 같다.
  • 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
  • 생성자의 이름은 클래스의 이름과 같아야 한다.
  • 생성자는 리턴값이 없다. void도 쓰지 않는다.
  • 기본 생성자(default constructor) : 매개변수가 없는 생성자, 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.
  • 매개변수가 있는 생성자 : 인스턴스마다 각기 다른 값으로 초기화되어야하는 경우가 많기 때문에 매개변수를 사용한 초기화는 매우 유용하다.

출처: https://gangzzang.tistory.com/entry/클래스Class-객체Object-인스턴스Instance-생성자Constructor [갱짱.study]



본 게시글은 fastcampus 박은종강사 수업을 듣고 개인적으로 정리한 내용임을 밝힘.

profile
Back-end-dev

0개의 댓글