개인공부

빵형 자바 9일차; 객체지향 프로그래밍, 패키지와 클래스

성하 盛夏 2024. 3. 18. 02:27

- 인터프리터(Interpreter) 방식의 언어 : 전체를 한 번에 컴파일하지 않고 명령어 하나하나를 컴퓨터가 알 수 있는 코드로 그 즉시 변환하여 실행하는 방식.

- 컴파일(Compile) 언어 : 미리 컴파일하여 컴퓨터가 알 수 있는 코드로 변환한 후 실행하는 언어.

*컴파일 Compile : 소스코드 파일이 실행 가능한 코드로 변환되는 과정.

- 객체지향 프로그래밍(OOP ; Object-Oriented Programming)

: 여러 개의 독립된 객체들을 만들고 객체 단위로 개발함.

: 개체 간의 특성에 따라 처리하고자 하는 특정 업무를 처리하고 결과를 데이터 객체로 넘겨주며, 객체 간 소통이 가능해짐.

: 객체마다 유연하게 프로그램이하여 시스템의 확장, 변경에 쉽게 대응할 수 있고, 안정적인 유지 보수가 가능함.

: 장점 - 직관적 분석 가능 / 코드 재사용이 용이함

: 단점 - 처리 속도가 상대적으로 느림 / 설계 시 많은 시간과 노력이 필요함

-빌드 Build : 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정, 혹은 그에 대한 결과물.


1. 패키지 Pakcage

: Java 파일의 최상단에 위치함. 

: 객체 간의 접근 시에 기준이 되는 정보.

 

 

2. 클래스 Class

(1) 필드 = 멤버 변수 Field

-클래스 내에 위치.

: 클래스를 생성하지 않고 바로 사용할 수 있는 변수 > 클래스 변수

+) static 키워드를 사용하여 만든 변수도 클래스 변수에 속함.

    ex) static final int ONE = 1; 

++) static block을 이용하여 초깃값을 정의할 수 있음.- 메모리에 올라가면서 호출되기 때문에 생성자보다 먼저 실행됨.

static final int ONE;
static final int TWO;
static final int THREE;

static {
	System.out.println("static block 호출");
    ONE = 1;
    TWO = 2;
    THREE = 3;
}

 

: new 키워드를 사용해서 인스턴스를 생성한 뒤 사용할 수 있는 변수 > 인스턴스 변수

 

-클래스 변수, 인스턴스 변수 예제

public class Sample{
	public static void main(String[] args){
    	//인스턴스 변수를 사용할 때는 new키워드로 인스턴스 생성 후 이용 가능
        VO vo = new VO();
        
        vo.name = "example";
        vo.age = 21;
        
        System.out.println(vo.name+" "+vo.age); //인스턴스 생성 후 사용 > 인스턴스 변수
        System.out.println(VO.ONE+" "+VO.TWO); //별도의 인스턴스 생성 없이 사용 > 클래스 변수
    }
    
    public Class VO{
    	//필드
    	String name; //인스턴스 변수
        int age; //인스턴스 변수
        
        static final int ONE = 1; //클래스변수
        static final int TWO = 2; //클래스변수
    }
}

 

 

(2) 메서드 Method

: 함수의 작은 개념.

+) ∵ 함수는 독립적으로 사용할 수 있으나, 메서드는 클래스에 종속되어 사용되기 때문.

- 어떤 문제를 처리하기위한 단위를 메서드의 형태로 구현함.

- 메서드명은 보통 소문자로 시작하고 주로 동사형으로 작성함.

- 메서드 구조

[접근 제어자] [반환될 자료형] [메서드명](매개변수 . .. ) {
	처리문
    
    return 반환될 자료형의 리터럴;
}

 

- 메서드 구조 예제

publi void doPause(int param) {
	처리할 명령문
    //return 타입이 void이기 때문에 따로 return문이 필요하지 않음.
}

 

- 지역 변수 Local variable : 메서드 내의 변수.

매개변수 Parameter : 메서드에서 전달받은 변수.

인자 Argument : 메서드 호출 시 전달하는 변수.

this

: 인스턴스 자신을 가리키는 참조 변수.

: 생성자나 메서드에서 사용 - 멤버 변수 선택시에 주로 사용하며, 특히 매개변수와 변수명이 동일할 경우 구별 목적으로 사용됨.

+) 매개변수와 멤버 변수명이 동일할 경우, 메서드 내에서는 매개변수가 우선순위가 됨. > 매개변수 값에 매개변수 값을 넣는 것이 되기 때문에, 변숫값에 대한 할당은 영향을 미치지 않게 됨(The assignment to variable value has no effect)

: 사용 > this.멤버 변수

- 오버로딩 Overloading 

: 메서드명은 같으나 매개변수의 자료형이나 수를 다르게 구성하여 다양한 유형을 처리하기 위한 기술.

--예시

public class Compute {
	int result;
    
    void setValue(int value){
    	result += value;
    }
    
    void setValue(int value, int value2){
    	result += value + value2;
    }
	
    //setValue라는 동일한 이름을 가지는 메서드가 존재하나, 매개변수에 따라 다른 메서드가 실행됨.
}

 

- 가변인자 Variable arguments

: 똑같은 자료형이 계속 반복될 경우, 현재의 자료형이 계속해서 반복된다는 의미로 마침표 3개를 연속으로 입력하여 표현하는 것.

--구성

[접근 제어자] [메서드명] (자료형... 변수명) {
	명령문
}

 

--예시

public class Samle{
	public static int total = 0;
    
    public static void main(String[] args){
    	System.out.println(sum(1, 2, 3)); //결과 : 1+2+3 = 6
        System.out.println(sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); //결과 : 6(result값)+1..10 = 6+55 = 61
    }
    
    public static int sum(int... a){
    	for(int i : a){
        	total +=i;
        }
    }
}

 

-- 단, 일반 인자와 함께 사용할 경우, 가변 인자가 맨 뒤에 위치해야 하며, 무조건 1개만 들어가야 함.

---예시

public void run(int a, int...b) //예시 1

public int ages(int c, int d, int...e) //예시 2

 

- 재귀함수 Recursive Function

: 메서드 내에서 스스로를 반복적으로 호출하여 처리하는 방식.

- 반복의 끝이 반드시 존재한다는 조건이 필요함.

- 일정한 패턴의 형태로 처리되는 구조일 때 주로 사용.

--예시

public class Sample{
	static int sum;
    
    public static void main(String[] args){
    	System.out.println(sum(10)); // 실행 시 55가 나옴
    }
    
    public static int sum(int a){
    	sum += a;
        
        if(a == 0){
        	return sum; //자기자신을 호출함
        } else{
        	a--;
            return sum(a); //자기 자신을 호출함
        }
    }

}