[Java] 클래스(Class) - 기본 개념

Junseo Kim·2019년 12월 18일
7

[Java]자바 기초

목록 보기
9/35

객체지향 프로그래밍이란?

코드를 짤 때, 객체 중심으로 뭔가를 붙인다.
객체 안에 기능도 포함된다.

객체지향 프로그래밍의 특징

  • 추상화(abstraction)
    실제 세상을 프로그래밍으로 옮길 수 있게, 필요한 기능들만 가져와서 단순화
  • 캡슐화(encapsulation)
    보안적인 기능에 도움을 줌, 규칙 정의, 사용 용도 명확히. 안에 있는 값을 노출하지 않음.
  • 상속성(inheritance)
    부모를 지정하고, 부모의 코드를 가져다가 쓸 수 있는 것. 코드의 재사용성
  • 다형성(polymorphism)
    변수가 여러 가지 모습으로 변할 수 있는 것.

클래스

사물 하나 하나를 기능별로 묶어서 사용하는 것. 각 클래스 안에서 역할에 따라 각 클래스의 기능을 서술해 나감.
사람에 따라, 같은 프로그램을 만들더라도, 여러가지 관점으로 만들 수 있다.
자바에서는 어떤 프로그래밍이든 클래스 안에 속해있다.(public static void main(String[] args) 기능도 class안에 속해 있다)
다른 클래스에서 다른 클래스를 선언 하여 사용할 수 있다.

public class 클래스이름 {
	public static void main(String[] args){
    //프로그램 시작 시점 
    }
}

클래스의 구조

  • 멤버변수
    클래스 안의 기능을 끄집어 내서 사용할 때 사용.
    저장할 공간.
    (ex. 화면에 출력 시 사용했던 System.out.println()에서 out은 System이라는 클래스의 out이라는 멤버변수를 사용한 것이다.)

  • 메서드(method)
    기능을 나타낸다.
    ()가 항상 붙어있다.
    (ex. System.out.println에서 println()이다.)

  • 생성자(constructor)
    처음에 값을 넣어줄 때 사용(default 값)

public class 클래스이름 {

	// 멤버 변수
	int a;
    int b;
    
    // 생성자
    클래스이름(){
    	a=10;
        b=15;
    }

	// 메서드
	public static void main(String[] args){
    //프로그램 시작 시점 
    }
}

Tip) 멤버 변수에 static을 붙여줄 경우, 메모리를 정적으로 사용하겠다는 의미(메모리 주소 위치가 바뀌지 않는다)
static int a = 10;

클래스 사용해보기

Person이라는 클래스 만들어 메인 클래스에서 사용해보기
사람은 뼈, 혈관 등 엄청나게 복잡하고 많은 기능들을 가지고 있지만, 우리가 필요한 기능만 단순화 해서 사용 -> 추상화

package practice1;

public class Practice{

	public static void main(String[] args){
    	Person junseo = new Person(); // Person이라는 타입으로 메모리 요청. 이 구문이 실행시 Person 클래스의 생성자가 실행됨
        
        Person iu = new Person("iu", 27); // 매개변수가 있는 생성자가 호출됨.
        
        iu.hello(); // Person 클래스의 hello() 메소드가 실행됨(1번 메소드)
        iu.hello("junseo"); // 2번 메소드
        System.out.println(iu.hello1()); // 3번 메소드
        System.out.println(iu.hello1("junseo")); // 4번 메소드
    }
}
package practice1;

public class Person {
	
    // 멤버 변수
    int age;
    String name;
    
    // 메서드(1번 경우)
    public void hello(){
    	System.out.println("hello! my name is " + this.name );
    }
    
    // 메서드(2번 경우)
    public void hello(String to){
    	System.out.println("hello! " + to +  " my name is " + this.name );
    }
    
    // 리턴 값이 있는 메서드(3번 경우)
    public String hello1(){
    
    	String hello = "hello! my name is " + this.name; 
    	return hello;
    }
    
    // 리턴 값이 있는 메서드(4번 경우)
    public String hello1(String to){
    
    	String hello = "hello! " + to +  " my name is " + this.name;
    	return hello;
    }
    
    // 기본 생성자
    Person(){
    	name = "junseo";
        age = 24;
    }
    
    // 생성자 인자(매개변수)가 존재하는 경우
    Person(String name1, int age1){
    	name = name1;
        age = age1;
    }
}

Tip) 생성자를 여러개 둘 수 있다. 클래스 선언 시, 항상 default 값으로 클래스 변수를 선언하지 않고, 다른 값이 필요한 경우가 있기 때문.

Tip) this를 통해 멤버 변수끼리 서로 참조를 할 수 있다.(멤버 변수를 static으로 선언하지 않아도, 메소드 안에서 참조 할 수 있다.) this사용시, 클래스의 멤버 변수를 사용한다는 것을 나타낸다.(메소드 안에 멤버변수와 똑같은 이름의 변수가 존재할 경우, this를 통해 이 변수가 클래스의 멤버 변수인지 아니면 메소드 안의 일반 변수인지를 구분)

Tip) 메소드의 4가지 형태
1. 화면에 출력만 하고 끝나는 기능(ex. hello())
2. 매개변수를 받는 경우(ex. hello(String to))
3. return 값을 돌려주는 경우(ex. hello1())
메소드 타입과 리턴 값의 타입을 맞춰줘야함
4. 매개변수를 받아서 return 하는 경우(ex. hello1(String to))

0개의 댓글