일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 웹기초
- MongoDB
- NavBar
- 이진탐색트리
- 자료구조
- GIT
- 자바문제풀이
- 뷰
- 웹해킹기초
- bootstrap
- 자바기초
- nodeJS
- 워게임추천
- 자바
- 웹개발
- 워게임
- gitbash
- 그래프
- Express
- node.js
- 포렌식
- CTF
- mongoose
- materialize
- 이진트리
- node
- 웹해킹
- 포렌식워게임
- wargame.kr
- 써니나타스
- Today
- Total
보안 전공생의 공부
객체지향프로그래밍에 대해 /클래스 (1) 본문
( 출처 : 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 클래스명{
멤버변수;
메서드(멤버함수);
}
멤버변수가 name, school, age, gender, grade이고,
메서드 print, save를 갖는 클래스 Person
▶ 필드(Field) : 속성 , 멤버변수
▶ 메소드(Method) : 기능(함수)
- 선언 : (접근제어자) 반환타입 메소드이름 ( 매개변수 ){ … }
- 호출 : 인스턴스이름.메소드이름( )
print 매서드와 save 매서드를 Person 클래스 내에 선언하였다.
◆ 인스턴스(객체)(Instance) : 클래스에서 정의한대로 메모리에 할당, 실제로 사용하게 될 대상(데이터)
( 참조하기 좋은 글 : https://whatisthenext.tistory.com/36 )
Main 함수에서 Person 인스턴스를 생성하고
이에 대한 매서드 save, print를 호출하였다.
▶ 생성자(Constructor) : 인스턴스 생성할 때 변수들 초기화
- 값을 반환하지 X : 인스턴스를 생성해주는 역할을 하는 특별한 메소드라고 볼 수 있음
- 생성자 이름 = 클래스 이름
위에서 인스턴스 Person에 대해 매서드 save의 값으로 [Jay, 아주대, 23, A, 남]을 지정했다.
이들은 인스턴스 변수 [name, school, age, grade, gender]의 값으로 설정되어 유지된다.
만약 매서드 save를 호출하기 전에 print를 호출하면 원하는 결과 얻을 수 X
☞ 사용자 입장에서 불편하고, 잘못된 사용으로 오류가 발생할 확률 ↑
생성자를 사용하는 것이 더 편리
Person 클래스에 생성자를 추가한다.
생성자는 객체를 생성할 때 추가한다.
◆ 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 |