본문 바로가기
Language/Java

[Java] 객체지향프로그래밍 OOP

Writer mintparc 2019. 9. 22.

객체 지향 프로그래밍 OOP


자바라는 언어에 꼭 따라 붙는 수식어가 있다. 바로 객체 지향이다. 영어로는 Object Oriented Programing 줄여서 OOP 라고 한다. 객체지향 프로그래밍이란 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 객체들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고 받고, 데이터를 처리할 수 있다. 

 

 

 

클래스 Class


  • 객체를 생성하려면 객체를 만들기 위한 설계도가 필요하다. 클래스가 바로 객체의 설계도이다.
  • 연관되어 있는 변수와 메소드들의 집합이다.

 

필드 Field


Type Field;

타입 필드;

 

  • field, member, 필드, 클래스 멤버변수, 멤버변수, 전역변수 ... 비슷한 용어를 사람에 따라 혼용해서 사용한다.
  • 필드는 객체의 속성을 저장한다.
  • 생성자와 메소드 밖에서 선언되어 생성자와 메소드 전체에 사용된다.
  • 필드의 초기값은 선언시에 할당할 수도 있고, 할당되지 않으면 타입에 따라 초기값이 자동으로 할당된다.

 

  • Member 클래스 필드 선언
package com.sample;

public class Member {
    String name;
    int age;

}

 

  • 외부 클래스에서 Member 필드값 사용
package com.sample;

public class MemberInformation {
    public static void main(String[] args) {
    
    Member member = new Member();    
    member.name = "김철수";
    member.age =  18;

   }
}

MemberInformation 이라는 메인 메소드를 가진 외부 클래스에서 도트연산자( . )를 이용해 Member 클래스의 필드값을 사용하려고 한다.

 

Member member = new Member(); 

필드는 객체에 소속된 데이터이므로 우선 new 연산자로 객체를 생성해준다. 

 

member.name = "홍길동";
member.age =  18;

만들어진 객체는 도트연산자( . )를 통해서 객체가 가지고 있는 필드와 메소드에 접근할 수 있다.

 

 

 

생성자 Constructor


ClassName ( parameter ) {

}

클래스이름 ( 매개변수 ) {

}

 

  • 생성자는 객체생성과 필드 초기화의 역할을 한다.
  • 클래스 이름과 동일한 이름을 가진다.
  • new 연산자로 호출한다.
  • 리턴 타입이 없다.
  • 생성자를 생략하면 자동으로 기본 생성자가 생성된다. 따라서 클래스에 생성자를 선언하지 않아도 new 연산자 뒤에 기본 생성자를 호출하여 객체를 생성할 수 있다. 그러나 클래스가 선언한 생성자가 하나라도 있으면 컴파일러는 기본 생성자를 자동으로 만들어주지 않는다.

 

  • 생성자 선언
public class Member {

	public Member(String name, int age){
    
    }
}

파라미터의 선언은 생략할 수도 있고, 여러개를 선언해줄 수도 있다. 파라미터는 new 연산자로 생성자를 호출할 때 외부의 값을 생성자 내부로 전달하는 역할을 한다.

 

  • 생성자 호출과 객체 생성
public class MemberInformation {
	public static void main(String[] args){
    Member member = new Member("김철수", 18);
    
    Member member = new Member(); //오류
    }
}

생성자에 파라미터가 선언되어 있다면, 객체를 생성할 때 반드시 파라미터를 초기화시켜줘야 한다. Member 생성자는 name과 age 라는 파라미터가 선언되어 있는 생성자만 존재하기 때문에 기본 생성자가 자동으로 만들어지지 않고, 따라서 기본생성자를 호출할 수 없다.

 

 

  • 필드 선언 시 초기화
public class Member {
String name;
int age = 18;
}

Member 클래스에 다음과 같이 필드를 선언하면서 동시에, age에 18이라는 초기값을 설정해주었다.

Member m1 = new Member();
Member m2 = new Member();

그리고 Member 클래스로 부터 m1, m2 객체를 생성하게 되면 m1과 m2 객체의 age 값은 18로 저장이 되어있다.

 

 

  • 생성자 내에서 초기화
public class Member {
  // 필드
  String name;
  int age;
  
  // 생성자
  public Member(String name, int age) {
    this.name = name;    // 필드name.파라미터name
    this.age = age;      // 필드age.파라미터age

  }
	
}

일반적으로 필드와 동일한 이름의 파라미터를 사용한다. 필드와 파라미터를 구분 짓기 위해서 ' this . ' 을 필드 앞에 붙여준다.

Member m1 = new Member("김철수", 18);
Member m2 = new Member("박영희", 24); 

"김철수", "박영희" 는 파라미터 name을 통해서 필드 name 의 초기값이 되고, 18, 25는 파라미터 age를 통해서 필드 age의 초기값으로 사용된다.

 

 

  • 생성자 오버로딩
public class Member {

  public Member(String name) { 
  
  }
  
  public Member(String name, int age) {
  
  }
	
}

생성자 오버로딩은 파라미터를 달리 하는 생성자를 여러 개 선언하는 것이다.

Member m1 = new Member("김철수");
Member m2 = new Member("박영희", 24); 

 

메소드 Method


 

 

[Java] 메소드 Method

메소드의 정의 기능 클래스 내에 존재하는 함수 어떤 작업을 수행하기 위한 명령문들의 집합 하나의 이름으로 여러 개의 명령을 일괄 처리하는 작은 모듈 메소드의 구조 접근제한자 메모리영역 리턴타입 메소드명..

mintparc.tistory.com

 

 

객체 Object/ Instance


ClassType var = new Constructor();

클래스타입 변수 = new 생성자();

 

  • 설계도인 클래스를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
  • 메모리에 실제 구현할 구현체
  • 객체의 생성은 객체화, 인스턴스화라고도 한다. new 연산자로 클래스의 생성자를 호출함으로써 객체가 생성된다.

 

헷갈리는 용어


  • 클래스 멤버 : 필드, 생성자, 메소드
  • 클래스 변수 : 클래스로 선언한 변수

댓글