Java 클래스 #1

jjinny_0609·2023년 2월 8일
0

Java

목록 보기
11/31
post-thumbnail

클래스

객체 지향 프로그래밍

객체 지향 프로그래밍(OOP : Object-Oriented Programming) : 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법

  • 객체(object)
    물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것을 말한다.
    객체는 속성과 동작으로 구성되어 있는데 이때 사람의 이름이나 나이 등을 속성으로 보고, 사람이나 자동차 등이 움직이는 것을 동작이 있습니다.
    자바는 이 속성과 동작을 각각 필드(field)와 메소드(method)라고 부릅니다.

객체 지향 프로그래밍 특징

상속(Inheritance) : 상위 클래스의 모든걸 하위 클래스가 모두 이어 받는것. 부모가 자식에게 유전자를 물려주듯이 부모의 특징을
자식에게 모두 물려준다.
캡슐화(Encapsulation) : 데이터와 코드의 형태로 외부로 부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로
만드는 방법입니다.
다형성(Polymorphism) : 상속과 연관이 있는 개념으로 한 객체가 다른 여러형태(객체)로 재구성 되는 것을 말합니다.
자바의 오버로드(Overload)또는 오버라이드(Override)가 다형성의 대표적인 예라고 할 수 있고,
이것을 구현하는 걸 오버로딩(Overloading)과 오버라이딩(Overriding) 이라고 합니다.
추상화(abstraction) : 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는것 입니다.
실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통적인 특성을 파악해서 필요없는 특성을 제거하는 과정을 가르킵니다.

객체지향 프로그래밍의 장점

  1. 재사용성 : 상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있습니다.
  2. 생산성 향상 : 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킵니다.
  3. 자연적인 모델링 : 우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현 할 수 있습니다.
  4. 유지보수의 우수성 : 프로그램 추가 ,수정을 하더라도 캡슐화를 통해 주변 영향이 적기때문에 유지보수가 쉽습니다.

객체지향 프로그래밍의 단점

  1. 개발속도가 느림

  2. 실행속도가 느림

  3. 코딩난이도 상승


ex)

-회원가입-

속성
String id; //아이디
String password; //패스워드
String name; //이름
String birth; // 생년월일
String gender; //성별
String email; //이메일
String phone; // 휴대전화

동작(method)
로그인하기
회원가입하기
탈퇴하기
회원정보수정하기

-게시판-

속성
String title; //제목
String content; //내용
String writer; //작성자
String wrtier; //작성일
int cnt; //조회
int good; //좋아요

기능
게시판 글쓰기 기능
게시판 글수정 기능
게시판 글삭제 기능
게시판 목록리스트 보여주기 기능
게시판 상세내용 보여주기 기능

객체 간의 관계

  • 집합관계 (포함관계) - 객체는 하나의 부품이고, 하나는 완성품에 해당, 예를 들어 자동차는 엔진,타이어, 핸들 등으로 구성되므로 자동차와 이 부품들은 집합 관계라고 볼 수 있다.

  • 사용관계 - 객체 간의 상호작용을 말합니다.
    객체는 다른 객체의 메소드를 호출하여 사용하므로 사람과 자동차는 사용관계라고 볼 수 있습니다.
    사람은 자동차를 사용할 때 달린다, 멈춘다 등의 메소드를 호출하는 것입니다.

  • 상속관계 - 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계를 말함.
    extends로 확장해서 부모 객체에 없는 내용을 만들어서 사용가능.

객체와 클래스

자바에서 설계도가 바로 클래스(class), 클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.
클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 한다.
클래스로부터 객체를 만드는 과정을 인스턴스화 라고 한다.
하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있는데, 이것은 동일한 설계도로 부터 여러 대의 자동차를 만드는것과 동일합니다.

객체 지향 프로그래밍 개발 세 가지 단계

  1. 클래스를 설계
  2. 설계된 클래스를 가지고 사용할 객체를 생성
  3. 생성된 객체를 이용

public class 클래스이름{

}

ex)

package ch06;

public class Car {	// Car 클래스 선언
	
}
// Car클래스의 객체 생성

new Car();

public class Tire{
	// 대표 클래스 말고 public을 붙이면 오류가 발생함
    // The public type Tire must be defined in its own file
    // 공용 유형 타이어는 자체 파일에 정의되어야 합니다
}

class Excel{
	
}


객체 생성과 클래스 변수

객체 생성
new 클래스();

new는 클래스로부터 객체를 생성시키는 연산자. new 연산자 뒤에는 생성자가 오는데, 생성자는 클래스() 형태를 가지고 있다.
new 연산자로 생성된 객체는 메모리 힙(heap) 영역에 생성된다.

클래스 변수;
변수 = new 클래스();

아래와 같이 클래스 변수 선언과 동시에 객체 생성도 가능.
클래스 변수 = new 클래스();

정리하자면 main 부분에 클래스가 모여서 완성되는걸 생각하면됨.
아래 예제를 통해 확인.

ex) 
파일명 Student.java
package ch06;
//클래스 선언
public class Student {
}

파일명 StudentExample.java
package ch06;
// main 메소드가 있는 클래스에서 객체 생성
public class StudentExample {
	public static void main(String[] args) {
		Student s1 = new Student(); 
		System.out.println("s1 변수가 Student 객체를 참조합니다.");
		
		Student s2 = new Student(); 
		System.out.println("s2 변수가 또 다른 Student 객체를 참조합니다.");
	}
}


예제 2
파일명 Car
public class Car {	//Car클래스 선언
	// 속성
	// 차량의 색상
	String color;
	// 속도 계기판
	int speed;
	
	// 기능
	// 달린다.
	void run() {}
	// 멈춘다.
	void stop() {}
}
파일명 CarExample 
public class CarExample {
	public static void main(String[] args) {
//		int a  = 10;		
		Car c1 = new Car();	//new - 객체 생성, Car클래스의 객체를 생성한 후 C1 참조 변수에 저장
		
		Car c2 = new Car(); //new - 객체 생성, Car클래스의 객체를 생성한 후 C2 참조 변수에 저장
	}
}


클래스의 구성 멤버

필드, 생성자, 메소드

public class ClassName{
	//필드(Field) : 객체의 데이터가 저장되는 곳
	선언 형태는 변수(variable)와 비슷하지만, 필드를 변수라고 부르지는 않는다.
	변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸된다.
	(전역변수라고 생각) -> 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다.
	int fieldname;


	//생성자(Constructor) : 객체 생성 시 (필드를) 초기화하는 역할 담당 , 또는 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 한다.
	생성자는 new 연산자로 호출되는 특별한 중활호 {} 블록이다.
	생성자는 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고(생성자는 클래스 이름으로 해줘야함) 리턴 타입이 없다.
	ClassName() { ... }

	//메소드(method) : 객체의 동작에 해당하는 실행 블록     *메인메소드는 여러개 만들면 안됨!! 하나만 만들어서 클래스를 불러와서 사용해야함.
	void - 메소드의 리턴 타입 // void 메소드는 return 값이 없다. -> void 타입은 아무것도 반환하지 않는다는 말이기 때문에 뭔가를 반환할 필요 없음!
	void 타입을 사용하지 않을 경우 반드시 return 값을 반환해야함.
	void methodName() { ... }
}

void return 메소드 예제

public class ReturnvoidTest {
	public String returnMethod(String paramValue) {	//String return 메소드
		String returnValue = paramValue; // 값 넣어서 보내주면 returnValue에 넣어 초기화
		
		return returnValue;	// 값 반환
	}
	public void voidMethod() {	//void 메소드
		System.out.println("no return");	//void 메소드는 return 값이 없음
	}
	
	public static void main(String[] args) {
		ReturnvoidTest rvt = new ReturnvoidTest();	// 객체화
		
		System.out.println(rvt.returnMethod("call")); //returnMethod 호출
		
		rvt.voidMethod();	//voidMethod 호출
	}
}


필드 생성자 메소드 사용 예제



The constructor Car1() is undefined 오류 메시지
생성자 Car1()은 정의되지 않았습니다. -> 생성자가 없을때 나타나는 오류메시지

끝.

profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글