보안 전공생의 공부

객체지향프로그래밍에 대해 /클래스 (1) 본문

Language/JAVA

객체지향프로그래밍에 대해 /클래스 (1)

수잉 2021. 1. 23. 11:34

( 출처 :  jeong-pro.tistory.com/95 )

 

◆ 객체 지향 프로그래밍 ( Object Oriented Programming, OOP )

 

 프로그래밍에서 필요한 데이터를 추상화상태, 행위를 가진 객체를 만들고

그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

 

· 장점

 - 코드 재사용 용이 : 타인의 클래서 가져와 이용 가능, 상속을 통한 확장

 - 유지보수 편이 : 절차 지향 프로그래밍에서는 코드 수정 시 일일이 찾아 수정해야하지만,

객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 맴버 변수 or 매서드로 있어 해당 부분만 수정하면 됨

 - 대형 프로젝트에 적합 : 클래스 단위로 모듈화시켜 개발 가능 → 분업 용이

 

· 단점

 - 처리속도 상대적으로 느림

 - 객체 많으면 용량 커짐

 - 설계시 많은 시간, 노력 필요

 

▶ 자료의 추상화

 불필요한 정보 숨기고 중요한 정보만 표현

 → 공통의 속성, 기능을 묶어 이름을 붙이는 것 ( = 객체지향 관점에서 클래스 정의 )

 

▶ 캡슐화

 관련된 기능과 특성을 한 곳에 모으고 분류 ( 기능과 특성의 모음을 클래스라는 캡슐에 넣어 분류한것)

 - 목적 : 코드 재수정 재활용 가능

 

▶ 다형성

 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있다는 것

 - 오버라이딩(overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의, 사용

 - 오버로딩(overloading) :  같은 이름의 메서드를 여러 개 가지면서 매개변수의 타입, 개수가 다르게 해

매개 변수에 따라 다르게 호출할 수 있게 함

 (추가 : hyeonstorage.tistory.com/185)

 

 

 


( 참고 : m.blog.naver.com/purpose0509/222097564262 )

 

◆ 클래스(Class) : 인스턴스를 정의하는 틀 ( 속성행위변수 메서드로 정의함)

 

- 구성 : 필드, 메소드 , 생성자(constructor)

- (접근 제어자) class 클래스명{

             멤버변수;

             메서드(멤버함수);

    }

클래스 예시 (Person.java)

멤버변수가 name, school, age, gender, grade이고,

메서드 print, save를 갖는 클래스 Person

▶ 필드(Field) : 속성 , 멤버변수

▶ 메소드(Method) : 기능(함수)

- 선언 : (접근제어자) 반환타입 메소드이름 ( 매개변수 ){ … }

- 호출 : 인스턴스이름.메소드이름( )

메서드 선언

print 매서드save 매서드Person 클래스 내에 선언하였다.​

◆ 인스턴스(객체)(Instance) : 클래스에서 정의한대로 메모리에 할당, 실제로 사용하게 될 대상(데이터)

( 참조하기 좋은 글 : https://whatisthenext.tistory.com/36 )

Main.java

Main 함수에서 Person 인스턴스를 생성하고

이에 대한 매서드 save, print를 호출하였다.

Main클래스 실행 결과 ( 성별이랑 성적 바뀜 히히)

 

▶ 생성자(Constructor) : 인스턴스 생성할 때 변수들 초기화

 - 값을 반환하지 X : 인스턴스를 생성해주는 역할을 하는 특별한 메소드라고 볼 수 있음

 - 생성자 이름 = 클래스 이름

Main.java

위에서 인스턴스 Person에 대해 매서드 save의 값으로 [Jay, 아주대, 23, A, 남]을 지정했다.

이들은 인스턴스 변수 [name, school, age, grade, gender]의 값으로 설정되어 유지된다.

 

만약 매서드 save를 호출하기 전에 print를 호출하면 원하는 결과 얻을 수 X

 

☞ 사용자 입장에서 불편하고, 잘못된 사용으로 오류가 발생할 확률 ↑

 

생성자를 사용하는 것이 더 편리

Person.java

Person 클래스생성자를 추가한다.

Person.java

Main.java

생성자는 객체를 생성할 때 추가한다.

실행 결과

◆ this : 자기자신(인스턴스) 참조할 때 사용 (static 매서드는 사용X)

 매서드의 인수나 변수에 필드와 같은 이름을 붙여도 그것들을 구분해 사용 가능

this.name필드(멤버변수)인 name을 의미한다.

this.school 필드(멤버변수)인 school을 의미한다.

...

 

◆ this() : 같은 클래스의 다른 생성자 호출할 때 사용

(생성자 안에서 맨 위에 존재해야 함!)

 

(출처 :https://lowelllll.github.io/java/2018/12/09/java-this-%EC%B0%A8%EC%9D%B4%EC%A0%90/

coding-factory.tistory.com/523 )

 

 

--내가 만든 인적사항 출력 클래스 --

Main 클래스

public class Main {

	public static void main(String[] args) {
		Person Jay = new Person("Jay", "아주대", 23, 'A', "남"); 
		//인스턴스 생성
		Jay.print();
		
	}

}

Person 클래스

public class Person {
	String name;
	String school;
	int age;
	char gender;
	String grade; //멤버변수
	

	public Person(String name, String school, int age, char gender, String grade) {
		this.name=name;
		this.school=school;
		this.age = age ;
		this.gender = gender;
		this.grade = grade;
	}//생성자
	
	public void print() {
		System.out.println("이름 : " + this.name);
		System.out.println("학교 : " + this.school);
		System.out.println("나이 : " + this.age);
		System.out.println("성별 : " + this.gender);
		System.out.println("성적 : " + this.grade);
	}
	

}

'Language > JAVA' 카테고리의 다른 글

클래스 관련 문제풀이  (0) 2021.01.31
클래스(2) | 접근 제어자, 정적변수·메소드  (0) 2021.01.31
백준 2739번  (0) 2021.01.18
백준 2839번(미완)  (0) 2021.01.18
백준 10430 번  (0) 2021.01.18
Comments