Java

Minki CHO·2022년 11월 2일
0

CodeStates

목록 보기
9/43

1. list

클래스와 객체
필드와 메서드

2. remind

1) 객체지향 프로그래밍

-객체지향 프로그래밍 OOP/ Object Oriented Programming
: 프로그래밍에서 필요한 데이터를 모아 추상화 시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 협력과 유기적인 상호작용을 통해 특정 기능을 구성
: 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것

-객체지향 프로그래밍의 장점
ⅰ. 프로그램 개발 및 유지보수에 드는 비용과 시간을 획기적으로 줄일 수 있음
ⅱ. 객체를 통해 데이터를 관리하여 데이터를 손실없이 관리하기에 용이함

-객체지향 프로그램을 사용하는 이유
: 코드의 결합도를 낮추려고
(결합도가 높으면 하나의 코드 추가/삭제 시 많은 코드를 수정해야 할 수 있음)

2) 클래스 class

-클래스 : 객체를 정의한 설계도/틀
-객체 : 실재하는 모든 것
-클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 의해 정의되고, 클래스에 설계된 내용 그대로 생성됨

-클래스는 객체 생성에 사용하는 틀
(ex. 클래스는 붕어빵 틀, 객체들은 붕어빵들)

-클래스를 통해 생성된 객체 : 해당 클래스의 인스턴스(Instance)
-클래스로 객체를 만드는 과정 : 인스턴스화(Instantiate)

-객체와 인스턴스의 차이
: 두 단어의 혼용 사용이 가능하나, 객체는 모든 인스턴스를 포괄하는 넓은 의미, 인스턴스는 해당 객체가 어떤 클래스에서 생성된 것인지 강조

-클래스 정의 및 클래스를 통한 객체 생성을 해야하는 이유
: 클래스를 잘 만들면, 클래스를 이용해서 객체를 만들기만 하면 되므로..

-클래스

clss 클래스명 {
... //클래스 정의
}

-클래스 구성요소
ⅰ. 필드 : 클래스의 속성을 나타내는 변수(ex. 자동차→모델명, 컬러, 바퀴 수 등)
ⅱ. 메서드 : 클래스의 기능을 나타내는 함수(ex. 자동차→가속하기, 정지하기, 시동걸기 등)
ⅲ. 생성자 : 클래스의 객체 생성
ⅳ. 이너 클래스 : 클래스 안에 클래스

public class Example{
	int x=10; 				// 필드
    void printx() {...}; 	// 메서드
    Example {...};			// 생성자
    class Example2 {...};	// 이너 클래스
}

-클래스의 멤버 : 필드, 메서드, 이너 클래스

3) 객체 object

-객체 : 필드와 메서드로 구성

class car{					//	      자동차
private String model;		//←변수-   속성: 모델,
private int wheels;			//←변수-       바퀴 수
void power(){...};			//←매서드- 기능: 시동걸기,
void accelerate(){...};		//←매서드-      가속하기
}

-객체 생성 : new 키워드를 사용함

class carTest{
	public static void main(String[] args){
    	car bmw = new car();	//car 클래스를 기반으로 생성된 bmw 인스턴스
        car tesla = new car();	//car 클래스를 기반으로 생성된 tesla 인스턴스
        car audi = new car();	//car 클래스를 기반으로 생성된 audi 인스턴스
    }
}
클래스명 참조_변수명; //인스턴스 참조를 위한 참조변수 선언
참조_변수명 = new 생성자(); // 인스턴스 생성 후 객체 주소를 참조변수에 저장

-참조변수가 선언되면, new 키워드와 생성자를 통해 인스턴스를 생성하여 참조변수에 할당
(참조변수는 실제 데이터값이 아닌 실제 데이터가 저장된 힙 메모리의 주소값을 가리킴)
-new 키워드는 생성된 객체를 힙 메모리에 넣으라는 의미를 가지며, 생성자를 통해 객체가 만들어지며 해당 객체를 힙 메모리에 넣는 역할 수행
(생성자 : 클래스와 동일한 이름을 가졌으나 뒤에 소괄호 붙음)
-new 키워드와 생성자로 클래스의 객체를 생성하는 것은 해당 객체를 힙 메모리에 넣고 주소값을 참조변수에 저장하는 것임

아래처럼 줄여서 객체 생성 가능

클래스명 참조_변수명 = new 생성자();

-객체 활용
: 포인트 연산자(.)(해당 위치에 있는 객체 안을 보라)를 이용하여 특정 인스턴스 객체의 멤버(필드와 메서드)에 접근 가능함

참조변수 명.필드 명 //필드값 불러오기
참조변수 명.메서드 명() // 메서드 호출

4) 필드

-필드 : 클래스에 포함된 변수, 객체의 속성을 정의할 때 사용

-변수 종류
ⅰ. 클래스 변수(class variable, cv)
ⅱ. 인스턴스 변수(instance variable, iv)
ⅲ. 지역 변수(local variable, lv)

-필드 : 클래스 변수와 인스턴스 변수
-클래스 변수와 인스턴스 변수 구분은 static 키워드로 구분
→클래스 변수는 static 키워드 선언, 인스턴스 변수는 static 미선언

-지역 변수: 클래스 변수와 인스턴스 변수에 포함되지 않고, 메서드에 포함된 모든 변수

class Example{	//클래스 영역
	int instanceVariable;		//인스턴스 변수
    static int classVariable;	//클래스 변수
    
    void method(){ //메서드 영역
    int localVariable = 0; //지역 변수, 메서드 안 {} 블록에서만 유효
    }
}

-인스턴스 변수 iv
: 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수
: new 생성자()를 통해 인스턴스가 생성될 떄 만들어짐

-클래스 변수 cv
: 독립적인 저장공간을 가지는 인스턴스 변수와 다르게 공통된 저장공간을 공유
: 한 클래스로부터 생성된 모든 인스턴스들이 특정한 값을 공유해야 할 때, static 키워드를 사용하여 변수 선언
: 인스턴스 변수와 달리 인스턴스를 따로 생성하지 않아도, 언제라도 클래스명, 클래스 변수명을 통해 사용 가능

Example.classVariable //클래스 변수 사용

-지역 변수 lv
: 매서드 내에서 선언되고, 매서드 내 { }블록에서만 사용 가능
: 멤버 변수와 다르게 스택 메모리에 저장되어 메서드 종료 시 동시 소멸

-필드 변수와 지역 변수의 차이점 : 초기값
: 직접 초기화 하지 않으면 값을 출력할 때 오류가 발생하는 지역변수와 다르게 필드 변수는 직접적으로 초기화 실행하지 않아도 강제로 초기화 됨

| 클래스 영역 | 스택 메모리 영역 | 힙 메모리 영역 |
↳지역변수 저장 ↳필드 저장

-static 키워드 추가 필요
: static은 클래스의 멤버(필드, 메서드, 이너클래스)에 사용하는 키워드
: static이 붙은 멤버 : 정적멤버(static member)
: static이 붙어있지 않은 인스턴스 변수와 구분

5) 메서드 Method

-메서드
: 특정 작업을 수행하는 일련의 명령문들의 집합
: 클래스 기능에 해당하는 내용

-메서드 구분
ⅰ. 메서드 시그니처(method signature)
ⅱ. 메서드 바디(method body)

자바_제어자 반환타입 메서드명(매개변수){	   //메서드 시그니처
	메서드 내용 						//메서드 바디
}

-메서드 시그니처
: 해당 메서드가 어떤 타입을 반환하는가 : 반환타입
: 메서드의 이름은 무엇인가 : 메서드명
: 해당 작업을 수행하기 위해 어떤 재료가 필요한가 : 매개변수

-메서드 반환타입이 void가 아닌 경우, 메서드 바디 {} 안에 꼭! return문 필요
-결과값은 반드시 반환타입과 일치하거나 적어도 자동변환이 가능해야 함

-메서드 호출
: 메서드도 클래스의 멤버이므로 클래스 외부에서 메서드를 호출하기 위해서는 먼저 인스턴스를 생성해야 함, 인스턴스 생성 후에는 포인트 연산자(.)를 통해 메서드를 호출
: 반면 클래스 내부에 있는 메서드들끼리는 따로 객체를 생성하지 않고도 서로를 호출할 수 있음

메서드 이름(매개변수 1, 매개변수2, ...); //메서드 호출방법, 매개변수는 없어도 가능함

void printHello();
int getNumSeven();
Double multiply(4, 4.0);

인스턴스명.메서드(); //인스턴스를 통한 메서드 호출

-메서드 호출 시 괄호() 안에 넣어주는 입력값을 인자(argument)라고 함
-인자의 개수, 순서는 반드시 메서드를 정의할 떄 선언했던 매개변수와 일치해야 함
-인자 : 메서드를 호출할 때 넘기는 값

6) 메서드 오버로딩 Method Overloading

-메서드 오버로딩
: 하나의 클래스 안에 같은 이름의 매서드를 여러 개 정의하는 것

-매서드 오버로딩 성립 조건
ⅰ. 같은 이름의 메서드명 사용
ⅱ. 매개변수의 개수나 타입이 다르게 정의되어야 함
(반환타입은 오버로딩 성립에 영향주지 못함)

-오버로딩 장점
: 하나의 메서드로 여러가지 경우의 수를 해결할 수 있음
→(정의 시) 메소드 명 낭비 줄임
→(호출 시) 호출할 때 사용자가 여러가지를 외우지 않아도 됨
ex. println

profile
Developer

0개의 댓글