오늘 읽은 범위
6장 객체와 자료구조
책에서 기억하고 싶은 내용을 써보세요.
- 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. (p.119)
- 객체는 조회 함수로 내부 구조를 공개하면 안된다. (p.123)
- 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다. 다른 경우로 새로운 동장을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합하다. (p.128)
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.
- 객체지향 프로그래밍 경험이 없어서 그런지 개념이 좀 어려웠다. 일단 객체와 자료구조가 어떤 의미로 쓰이는 건지 몰라서 검색을 해보고 나서야 조금 이해가 됐다.
- 결론은 상황에 따라 객체를 쓸지, 자료구조를 쓸지 잘 판단해서 설계하라는건데, 처음부터 딱 정해두고 설계를 하긴 쉽지 않을 것 같긴하다. 판단의 근거에 대해서 ChatGPT에게 물어봤는데, 다음와 같이 알려줬다.
- 비즈니스 로직이 많거나 상태를 안전하게 보호해야 하는 경우
→ 객체 (데이터 숨김, 메서드로 접근)- 단순히 데이터를 주고받거나 가공이 필요 없는 경우
→ 자료구조 (DTO, JSON 등)
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
- 객체 : 상태(데이터)와 행동(메서드)를 한데 묶어서 외부에서 내부 구조를 직접 볼 수 없게 감춰놓은 것
- 자료구조 : 데이터의 상태는 그대로 노출되고, 행동은 별도로 작성. 외부에서 데이터 접근 가능.
- DTO : 데이터 전달 객체로 테이터만 담는 객체. 계산이나 비즈니스 로직없이 데이터만 실어 나르는 역할.
- 활성레코드 : 데이터 + 데이터 작업 로직을 같이 갖고 있는 객체. DB와 상호작용하는 형태.
🔽 DTO 자바스크립트 예제
// 사용자 정보를 담는 DTO
class UserDTO {
constructor(id, name, email) {
this.id = id;
this.name = name;
this.email = email;
}
}
// 사용 예시
const userDto = new UserDTO(1, 'Alice', 'alice@example.com');
console.log(userDto.name);🔽 활성레코드 자바스크립트 예제
class User {
constructor(id, name, email) {
this.id = id;
this.name = name;
this.email = email;
}
save() {
// DB에 insert/update 쿼리를 실행
}
delete() {
// DB에 delete 쿼리를 실행
}
}
// 사용 예시
const user = new User(1, 'Alice', 'alice@example.com');
user.save();
user.delete();