용어들이 헷갈리고 종류가 많아서 용어를 제대로 파악한 뒤 개념에 접근하면 이해가 빠르게 될 것이다. 

일단 1편은 코딩에 직접적으로 사용되는 용어들로 구성하였다. 

 

📌클래스 

자바 프로그래밍은 무조건 하나 이상의 클래스가 존재하는데 클래스 내부에는 필드와 메서드로 구현할 수 있다. 

현실세계를 하나의 특징에 의해 묶기 위해 추상화하는 것으로 불필요한 속성은 제거하고 중요하고 유사한 특징만 클래스로 표현하는 모델링기법 

클래스는 설계도에 불가하며 아직 동작하지 않는 상태 

class 클래스명 {
 //필드 (객체속성)
 //메서드 (객체동작)
}
//클래스
public class Phone {
    public String os; 
	public Long battery;
	public String color;
	public boolean waterproofing;

	public void call(String number){
		...
	}

	public void takeAPicture() {
		...
	}
		...

}

 

클래스 변수(멤버)

각각 객체마다 다른 속성을 띄는 경우 인스턴스 변수 선언, 모든 객체가 공통적인 속성을 띄고 공유할 경우 클래스 변수를 선언해야한다.

static 키워드사용 가능 (객체 생성필요없으며 객체가 메모리에 자동생성)

 

클래스 변수 용도

  • 인스턴스에 따라서 변하지 않는 값이 필요한 경우
  • 인스턴스를 생성할 필요가 없는 값을 클래스에 저장하고 싶은 경우
  • 값의 변경 사항을 모든 인스턴스가 공유해야 하는 경우
public class StrawBerry {
	String price;	// price와 taste는 인스턴스 변수
	String taste;	// 딸기의 가격과 맛은 각기 다르다.
    static String water; // water는 클래스 변수, 딸기는 모두 물을 받으며 자란다.
	static String growth; // growth는 클래스 
// 변수 딸기는 모두 밭에서 자라지 않으므로 필요에 따라 이 값을 변경해 다른 값 출력
	
}

 

📌객체 

 객체 내에는 명사형의 상태(필드)와 동사형의 동작(메서드)가 존재한다 

 

예시 ) 핸드폰 매장에는 "아이폰13" ,"갤럭시S20",  "아이폰13mini" 등등 많은 휴대폰이 있는데

위와 같이 휴대폰이라는 하나의 특성으로 묶인 명칭이 바로 클래스이고,

하나하나의 휴대폰 종류들 중 "아이폰13"은  객체가 된다.

 

아이폰13이라는 객체가 갖는 상태와 행위 

->상태(필드):   os, 배터리, 색깔, 방수가능여부 등

->행위(메서드):  전화하다, 사진을 찍는다 등

 

 

즉 아이폰13은 "핸드폰"라는 개념에서 정의된 하나의 객체

 

객체상태는 구현해야할 대상 (아직 구현 전)

클래스명 변수명 = new 클래스명(); //객체 생성 방법
public class Phone {  //Phone이라는 클래스
  public static void main(String[] args) { 
    Phone iPhone13,galaxyS20 ; // '객체'(구현해야할 대상, 아직 구현은 안됨)
  }
}

 

 

📎인스턴스

클래스에 의해서 만들어진 객체를 인스턴스라 부른다 

설계도(클래스)를 통해서 구현해야할 대상(객체)이 실제로 구현된 구체적인 실체

실제 메모리로 할당된 상태

 

객체와 인스턴스의 차이 :

Phone iphone = new Phone();

Phone이라는 클래스에 iphone이라는 객체  생성

iphonePhone이라는 클래스의 의 인스턴스(instance)이다.

 

public class Phone {  //Phone이라는 클래스
  public static void main(String[] args) { 
    Phone iPhone13, galaxyS20; // '객체'(구현해야할 대상, 아직 구현은 안됨)
 
}

    // 생성자 선언을 통해 인스턴스화
     galaxyS20 = new Phone(); // galaxyS20은 Phone 클래스의 '인스턴스'(객체를 메모리에 할당)
     iPhone13 = new Phone(); // iPhone13은 Phone 클래스의 '인스턴스'(객체를 메모리에 할당)

  }
}

 

이렇게 객체와 인스턴스를 나누어서 사용하는 일은 거의 없고 대다수가 객체와 인스턴스를 합친 아래 코드 형태로 구현을 한다 

 public class Main {
  public static void main(String[] args) {
    Phone iPhone13 = new Phone;
	Phone galaxyS20 = new Phone;
  }
}


여기서 System.out.println(galaxyS20.);을 실행시키면 NullpointException이 발생하는데 name에 대한 

 

📌변수

매개변수 : method의 소괄호에 선언된 변수 , 어떤 입력값이 들어올지 값의 형태를 정의

class A{
   int a=100; // 멤버변수
   
    public void method(int b){ // 매개변수
       int c=300; // 로컬변수
     }
}

 

참조형 변수 : 참조 타입 종류는 배열, 열거, 클래스, 인터페이스가 있다.

참조형 변수는 실제 값이 아닌 주소 값을 저장한다.

참조 변수의 비교 연산(==, !=)
비교 연산은 기본 타입 변수의 경우 변수의 값이 같은지 아닌지 비교하지만, 참조 타입 변수의 경우 같은 객체를 참조하는지 아닌지 비교하게 된다.

null
참조 타입의 변수는 힙 영역의 객체를 참조하지 않는 뜻으로 null값을 가질 수 있다. 이 경우 스택 영역에는 변수는 생성하지만 힙 영역에는 객체를 생성하지 않는다.
null을 가지고 있는 참조변수를 사용할 경우 NullPointerExcepton 오류가 발생한다.

String
String도 참조 타입이다.
서로 다른 String 변수의 리터럴(값) 이 같을 경우 동일한 객체를 참조하게 된다.

 

지역변수(로컬변수) : method의 중괄호 (즉, 블록) 안쪽에 선언된 변수

 

 

인스턴스 변수 (멤버변수, 속성, 인자)  : 클래스에 추가되는 변수 메소드 또는 생성자를 호출할때 method의 중괄호 (즉, 블록) 바깥쪽에 선언된 변수 / 미리 선언해 두었던 매개변수에 값을 대입

public class Phone { // Phone이라는 클래스에 
    String name; //생성된 변수를 인스턴스 변수라 칭한다
} //name이라는 변수에서 iphone이나 galaxy와 같은 이름을 칭할 수 있다.

Phone iphone13 = new Phone() 처럼 인스턴스가 생성되면 iphone13(객체)의 인스턴스 변수인 name은 다음과 같이 접근이 가능하다

 

인스턴스.변수  iphone13.os

 

package foundation;

public class Phone {
	
		private String os; //인스턴스 변수선언
		private String color; // 인스턴스 변수선언
	
		public static void main(String[] args) { //구현이 되는 main 메서드
		  
	    Phone iPhone13 = new Phone(); // new생성자 선언 (인스턴스화) 
		Phone galaxyS20 = new Phone(); // new생성자 선언 (인스턴스화) 
		
		System.out.println(iPhone13.os); // 객체.인스턴스 변수를 출력 
	  } 
	}
//결과는 null 발생

 

이렇게 Null값이 나오는 이유는 인스턴스 변수인 os에 대한 값을 지정해 주지 않았기 때문에 빈 값만 나오게 된다 

그러기 위해서 인스턴스 변수인 os를 구현할 메서드를 추가해야한다.

 

📌메서드

클래스 내에 구현된 함수

객체의 내부 상태를 외부에서 보호 => 데이터 캡슐화

 

package foundation;

public class Phone {
	
		private String os; //인스턴스 변수선언
		private String color; // 인스턴스 변수선언
		
		public void setOs (String os) { //setOs라는 메서드 생성
			//Phone클래스에 의해 생성된 인스턴스 (this)를 호출해서 같은 이름인 os라고 다시 지칭해줌
			this.os = os;
		}
	
		public static void main(String[] args) { //구현이 되는 main 메서드
		  
	    Phone iPhone13 = new Phone(); // new생성자 선언 (인스턴스화) 
		Phone galaxyS20 = new Phone(); // new생성자 선언 (인스턴스화) 
		//결과는 nullpointException 발생 => 메서드로 인스턴스변수를 구현시켜야함
		
		iPhone13.setOs("ios");
		//iPhone13이라는 객체에 인스턴스 메서드(인스턴스 변수 값) 대입 
		System.out.println(iPhone13.os); // 객체.인스턴스 변수를 출력 
	  } 
	}

 

이렇게 메서드를 추가한 뒤 인스턴스 변수에 대한 값을 대입하여 출력하니 ios라는 값이 그대로 출력이 된다. 

복사했습니다!