티스토리 뷰
- 객체 → 객체라는 내용, 여러분
- 상호작용 → 설명한다.
1. 클래스란?
💡 서로 다른 타입의 데이터와 메소드를 정의하여 사용자 정의의 타입을 만들 수 있는데, 이것을 클래스라고 한다.
즉, 클래스는 사용자 정의의 자료형이다.
2. 객체란?
2-1. 객체지향프로그래밍(OOP)란?
💡 OOP(Object Oriented Programming language)
: 추상화, 캡슐화, 상속, 다형성을 적용하여 유지보수성을 고려한 응집력 높고 결합도 낮은 (유지 보수를 위함..) 객체 위주의 개발 방식을 적용한 프로그래밍을 말한다.
💡 현실 세계의 모든 사건(event)는 객체와 객체의 상호작용에 의해 일어난다는 세계관을 프로그램을 만들 때 이용하여 새로운 세계를 창조하는 방법론
객체가 서로 상호작용을 하며 사건이 일어난다는 개념은 현실 세계와 닮아있지만, 다른 점은 무생물이나 개념 같은 존재들도 하나의 주체로 본인의 상태를 스스로 제어하고 행동한다는 것이 다른 점이다. (의인화 기법 → 캡슐화를 의미한다.)
또한 모든 객체는 너무 많은 수행할 수 있는 것이 아닌 적절한 책임을 가지고 있어야 한다. 만약 너무 많은 것을 수행해야 하는 책임이 존재한다면 이는 또 다른 객체에게 책임을 나눈다. (단일 책임의 원칙)
2-2. 객체 간의 상호작용
💡 객체와 객체는 메세지(메소드 호출)를 통해 서로 상호작용
수신자는 메세지를 전달 받아 그 메세지에 해당하는 내용을 처리하는 방법을 스스로 결정한다. 스스로 결정한 방식대로 명령어를 순차적으로 기술한 것을 메소드(method).
상호작용에 중요한 것은 메세지를 수신하여 응답하는 상호작용을 설계하는 것을 의미한다.
객체 지향 프로그래밍에서 중요한 것은 이러한 상호작용을 설계하는 것이다. (즉, 필드보다는 메소드를 중점으로 추상화 기법을 적용하여 객체를 설계하는 것이 중요하다.)
2-3. 객체지향의 특징 (4대 특징)
- 추상화(Abstraction) (추상화를 제외하면 3대 특징)
- 캡슐화(Encapsulation)
- 상속(Inheritance)
- 다형성(Polymorphism)
package com.ohgiraffers.section01.user_type;
public class Application1 {
/* 필기.
* 객체지향프로그래밍(OOP)란?
* OOP(Object Oriented Programming language)
* : 추상화, 캡슐화, 상속, 다형성을 적용하여 유지보수성을 고려한 응집력 높고 결합도 낮은 (유지보수를 위함...)
* 객체 위주의 개발 방식을 적용한 프로그래밍을 말한다.
*
* 필기.
* 객체지향의 특징(4대 특징) / 면접 100프로!!!
* - 추상화(Abstraction)(추상화를 제외하면 3대 특징)
* - 캡슐화(Encapsulation)
* - 상속(Inheritance)
* - 다형성(Polymorphism)
* */
public static void main(String[] args) {
/* 수업목표. 클래스가 무엇인지 이해하고 작성할 수 있다. */
/* 설명.
* 회원 정보를 관리하기 위해 회원의 여러 정보(아이디, 비밀번호, 이름, 나이,
* 성별, 취미)를 취급하여 관리 하려고 한다.
* 이 자료를 취급할 수 있는 방법을 생각해 보자.
* */
/* 목차. 1. 변수를 이용한 회원 데이터 관리 */
String id = "user01";
String pwd = "pass01";
String name = "홍길동";
int age = 20;
char gender = '남';
String[] hobbies = new String[]{"축구", "볼링", "테니스"};
System.out.println("id = " + id);
System.out.println("pwd = " + pwd);
System.out.println("name = " + name);
System.out.println("age = " + age);
System.out.println("gender = " + gender);
System.out.println("hobbies = " + hobbies);
/* 필기.
* 이렇게 변수들로만 관리할 때 발생할 수 있는 문제점
* 1. 많은 변수명들을 관리하기 힘들 수 있다.
* 2. 메소드의 전달인자로 전달할 값이 너무 많아 회원과 관련된 기능을 호출할 때 매개변수가 많아진다.(나쁜 냄새)
* 3. 메소드의 반환형으로 회원이라는 개념을 반환할 수 없다.(메소드의 반환형은 하나여야 하기 때문에)
* */
/* 설명. 두 명의 회원 객체를 만들어 각각 다른 이름을 부여해 보기 */
Member member = new Member();
Member member2 = new Member();
System.out.println(member.name);
System.out.println(member2.name);
member.name = "김철수";
member2.name = "김영희";
System.out.println(member.name);
System.out.println(member2.name);
/* 설명. '김철수'씨만 완성해 보자. */
member.age = 30;
member.gender = '남';
member.hobby = new String[]{"볼링", "하키"};
member.id = "user03";
member.pwd = "pwd03";
/* 설명. 회원 정보를 하나의 전달인자로 전달하고 하나의 매개변수로 받을 수 있다. */
/* 설명. 또한 메소드의 반환형으로 한 번에 회원 정보를 반환할 수 있고 반환된 객체에 접근도 가능하다. */
Member returnValue = returnMember(member); // member는 실체가 아니라 주소값이다.
System.out.println("개명 됐는지 확인: " + returnValue.name);
}
public static Member returnMember(Member m) { // Member m = member
System.out.println("개명을 시작 하겠습니다.");
m.name = "박길동";
return m;
}
}
// 실행 결과
id = user01
pwd = pass01
name = 홍길동
age = 20
gender = 남
hobbies = [Ljava.lang.String;@14dad5dc
null
null
김철수
김영희
개명을 시작 하겠습니다.
개명 됐는지 확인: 박길동
package com.ohgiraffers.section01.user_type;
public class Member {
String id;
String pwd;
String name;
int age;
char gender;
String[] hobby;
}
'한화시스템 > 백엔드' 카테고리의 다른 글
[BE] JAVA_클래스와 객체_추상화 (0) | 2024.07.16 |
---|---|
[BE] JAVA_클래스와 객체_캡슐화 (0) | 2024.07.16 |
[BE] JAVA_배열 (0) | 2024.07.15 |
[BE] JAVA_분기문 (0) | 2024.07.13 |
[BE] JAVA_반복문 (0) | 2024.07.13 |