클래스와 객체

김민성·2022년 7월 14일
0

Java

목록 보기
10/47
post-thumbnail

클래스와 객체

객체지향언어

  • 객체지향언어는 코드 간에 서로 관계를 맺어 줌으로써 보다 유기적으로 프로그램을 구성할 수 있다.
  • 따라서 코드의 재사용성이 높고, 코드의 유지보수가 용이하다는 장점이 있다. 그리고 제어자와 메서드를 이용해 데이터를 보호하고, 코드의 중복을 제거하여 코드의 불일치로 인한 오작동을 방지할 수 있다.

클래스와 객체

  • 클래스란 객체를 생성하는데 사용되며, 객체를 생성하기 위한 설계도정도로 생각하면 된다.
  • 객체란 클래스에 설계된 내용대로 메모리에 생성된 것을 말한다. (인스턴스와 객체는 서로 같은말)
  • 클래스로부터 객체를 만드는 과정을 클래스의 객체화(인스턴스화)라고 한다.
  • 붕어빵 틀에서 만들어진 붕어빵을 예로 들어보자, 여기서 붕어빵 틀이 클래스이고 붕어빵이 붕어빵 틀이라는 클래스로 생성된 객체가 되는 것이다.
  • 객체의 구성요소
    • 멤버변수 (속성, 특성, 필드, 상태), (전역변수라고도 함)
    • 메서드 (기능, 함수, 행위)

객체의 생성과 사용

객체는 클래스명 변수명 = new 클래스명(); 형식으로 생성한다. (클래스명 변수명; 변수명 = new 클래스명(); 으로 나눠서 생성할 수도 있다.)

  • 객체의 생성과 사용

    public class Main {
    	public static void main(String[] args) {
    	Animal animal = new Animal();
    	animal.age = 3;
    	animal.name = "강아지";
    	System.out.println(animal.age);		// 3 출력
    	System.out.println(animal.name);	// "강아지" 출력
    	
    	animal.ageUp();
    	animal.changeName("고양이");
    	
    	System.out.println(animal.age);		// 4 출력
    	System.out.println(animal.name);	// "고양이" 출력
    	}
    }
    
    
    class Animal{
        // 멤버변수
    	String name;	// 이름
    	int age;		// 나이
    	
        // 메서드
    	void ageUp() {		// 나이 + 1
    		age++;
    	}
    	void changeName(String newName) {	// 이름 바꾸기
    		name = newName;
    	}
    }

    위의 코드를 보자. 아래에 Animal이라는 클래스를 만들었다. Animal 클래스 안에는 String 타입의 이름과 int타입의 나이가 멤버변수로 있고, 나이 + 1 하는 ageUp과 이름을 바꾸는 changeName 메서드가 있다.

    Animal 클래스는 객체가 생성되기 전까진 아무 기능도 할 수 없기 때문에 위의 Main 클래스에서 Animal animal = new Animal(); 로 Animal 타입의 객체를 생성해준다. 그럼 이제 참조변수 animal을 통해 Animal 클래스에 접근할 수 있게 된다. 객체 생성후 그 클래스에 있는 멤버변수를 사용하려면 참조변수.멤버변수 를 사용하고, 메서드를 사용하려면 참조변수.메서드이름()을 사용하면 된다.

    따라서 Main 클래스에서 animal.age = 3;animal.name = "강아지"로 초기화를 해준 후 출력을 해보면 3과 강아지가 출력이 된다. 그리고 메서드를 호출하기 위해 animal.ageUp();animal.changeName("고양이"); 를 해주어서 age에 age + 1의 값을 저장하고 name에 newName으로 넣어준 "고양이"의 값을 저장한다. (메서드 괄호 안에 값을 넣는것은 매개변수파트에서.. ) 그후 출력을 해보면 animal.age의 값은 4로, animal.name의 값은 "고양이"로 잘 출력이 된다.

0개의 댓글