반응형
알게된 내용
- Mutabe과 Immutable
- Immutable : 생성 후 그 상태가 변하지 않는 객체
- e.g. String, Integer, Float, Long
- 값이 수정되면 아예 새로운 값이 생성되고 참조값이 새 주소로 바뀜
- 값 수정 후 identityHashCode()로 해시코드를 출력해보면 다름 → 다른 객체임
- 멀티스레드 환경에서도 안전. 해시키로 사용 가능
- Mutable : 생성 후에도 상태를 변경할 수 있는 객체
- e.g. ArrayList, HashMap, StringBuilder, Date
- 변경이 많을 시 메모리 성능 상의 이점이 있음
- Immutable : 생성 후 그 상태가 변하지 않는 객체
- 변수명 앞에 a나 the 를 붙이는 경우
- 동일한 이름의 클래스가 존재하고, 클래스의 인스턴스를 만들고 싶을 때,e.g. Bird 의 인스턴스 aBird
- a 나 the 를 붙여서 분류가 아닌 객체임을 강조해준다.
- 물론 클래스명을 그대로 쓰는 것보단 좀더 유일무이한 객체임을 의미하는 변수명을 권장한다.
궁금한 점
- 상위클래스는 상속해줄 특성이 많을수록 좋다?
- LSP : 하위 타입은 상위 타입을 항상 대체할 수 있어야 한다
- 오버로딩을 지원하지 않는 언어 : C, JS, Dart 등
- 거기서는 오버로딩에 어떻게 대처하나?
- 메서드명에 타입을 명시함
- 파이썬은 인자 기본값을 활용해 오버로딩을 유사하게 구현
- 거기서는 오버로딩에 어떻게 대처하나?
정리한 것
- 클래스 class
- 클래스는 분류다
- 객체는 분류에 속하는 유일무이한 실체다
- 객체의 속성, 행위가 존재
- 클래스 : 객체 = 분류 : 실체
붕어빵보다는…. 펭귄 : 핑구
- 객체 지향 4대 특성
- 캡슐화 : 정보은
- 추상화 : 모델링
- 상속 : 재사용
- 다형성 : 사용 펀의
- 추상화 : 대상에게서 관찰자가 관심을 두는 특성만 추출하는 것
- 어플리케이션 경계 : 관찰자의 관심영역
- 자바에서는 class 를 통해 추상화를 지원
- 상속 : 재사용&확장 extends
- 계층도 보다는 분류도가 맞음
- 상위클래스의 특성을 하위클래스에 물려줌
- 재사용 : 리소스 효율적 사용
- 확장 : 하위 클래스에서 필요한 특성을 추가
- 하위 클래스는 상위 클래스다 : LSP
- is-a 가 아니라 is a kind of 관계이다.
- 클래스는 ‘분류’ 이기 때문에 ‘~이다’ 의 논리가 적용되는 것은 어색하다.
- 자바에서 다중상속과 인터페이스
- 다중상속 : 다중상속이 가능할 경우,
- 상속한 클래스에 동일한 이름의 상위메서드가 여러개 존재하면 어떤 것을 사용할 지 난감해짐
- 인터페이스 : 다중상속의 장점 활용 가능
- ~able : 구현은 (인터페이스)할 수 있다.
- e.g. Serializable, Cloneable, Comparable, Runnable …
- 상속은 특성을 상속해줌 / 인터페이스는 기능 구현을 강제함인터페이스는 구현할 메서드가 적을수록 좋음 : ISP
- → 상위클래스는 상속해줄 특성이 많을수록 좋음 : LSP
- 다형성 : 사용편의성
- 오버라이딩, 오버로딩, 제네릭 → 사용편의성 제공
- 캡슐화 : 정보 은닉
- 접근제어자를 통해 은닉
주요 내용
부가적인 내용
- 더이상 참조되지 않는 객체는 힙 영역에서 GC 에 의해 수거됨
- **GC가 언제 오는지는 신만이 아신다는 말이 있다
- 메모리 이름
- static 영역이 static 인 이유 - 프로그램 실행 후 메모리 static영역에 한번 올라가면 위치가 변할 일이 없는 영역이기 때문
- 스택 영역이 스택인 이유 - FILO 라서
- 힙 영역이 힙인 이유 - 대용량 자료를 저장할 수 있도록 메모리를 사용하는 방식
- 변수 초기화
- 지역(local)변수는 직접 초기화해주지 않으면 쓰레기값을 가짐
- 멤버변수(local 외)는 기본값으로 초기화해줌(초기화의 주체를 규정하기가 애매하므로)
- 상속의 동작
- 인스턴스 생성 시 상위 클래스 인스턴스도 힙영역에 함께 생성됨
- 상위 클래스 타입 변수에 하위 클래스 인스턴스를 할당할 경우, (형변환)변수는 해당 상위클래스 인스턴스의 힙영역 위치를 참조함
- 하위 및 상위 클래스 인스턴스 모두 생성되고
- 오버라이딩된 메서드는 상위 메서드까지 덮어씌움
- 정적 멤버는 일관된 사용과 물리적 접근 효율성을 위해 Class.staticVar 형식으로 접근하자
- 참조변수를 할당하는 경우에는 참조(주소)값 자체를 복사함 (Call By Value)
- 참조변수는 가진 값을 주소값으로 사용한다는 것만 다를 뿐
- 객체지향적으로 쓰인 코드는논리적으로 이해하기 쉬워야 한다
- 인간의 언어로 번역하면서 읽을 때
- getter & setter 는 한국말로 접근자 & 설정자
- 접근제어자 범위
- private / default / protected / public
- 클래스 / 패키지 / +상속 / all
- 변수명 앞에 a나 the 를 붙이는 경우
- 동일한 이름의 클래스가 존재하고, 클래스의 인스턴스를 만들고 싶을 때,e.g. Bird 의 인스턴스 aBird
- a 나 the 를 붙여서 분류가 아닌 객체임을 강조해준다.
- 물론 클래스명을 그대로 쓰는 것보단 좀더 유일무이한 객체임을 의미하는 변수명을 권장한다.
- 오버라이딩 / 오버로딩 이미지화
- 올라타면 위에서 하나로 보이고,
- 옆으로 나열해서 적재하면 모두 보임
알아보기
여기까지 자세히 알아보지는 못했는데, 일단 기록한다
- 논리적설계, 물리적 설계 92p
- 이뮤터블과 메모리 할당 97p
- 힙이 힙인 이유?
- 지역변수는 기본자료형도 초기화가 안돼??
- 다중상속의 다이아몬드 문제 117p
- 상위클래스는 상속해줄 특성이 많을수록 좋음 : LSP ? 119p
- 인텔리제이에서 클래스 다이어그램 보는 법.. 124p
- 명시적 형변환(Casting) / 암묵적 형변환(Promotion) 127p
- 오버로딩을 지원하지 않는 언어가 뭐가 있나? 거기서는 오버로딩에 어떻게 대처하나? 133p
스터디에서
- LSP : 계약을 지켜
- 형식적인 계약
- 맥락적인 계약
- → 잘못된 코드인 것 같고, 객체지향적이지도 않은 것 같다고 생각했다.
- 파이썬도 언어 차원에서는 오버로딩을 지원하지 않아서 인자의 기본값을 세팅하는 방향으로 오버로딩을 유사하게 만들어쓴다.
반응형
'Java' 카테고리의 다른 글
[🐸객체 개구리책] 4,5장 자바가 확장한 객체지향 & SOLID (0) | 2025.03.19 |
---|---|
[🐸객체 개구리책] 1,2장 자바 등장 배경 & 메모리 동작 방식 (1) | 2025.03.05 |
반응형
알게된 내용
- Mutabe과 Immutable
- Immutable : 생성 후 그 상태가 변하지 않는 객체
- e.g. String, Integer, Float, Long
- 값이 수정되면 아예 새로운 값이 생성되고 참조값이 새 주소로 바뀜
- 값 수정 후 identityHashCode()로 해시코드를 출력해보면 다름 → 다른 객체임
- 멀티스레드 환경에서도 안전. 해시키로 사용 가능
- Mutable : 생성 후에도 상태를 변경할 수 있는 객체
- e.g. ArrayList, HashMap, StringBuilder, Date
- 변경이 많을 시 메모리 성능 상의 이점이 있음
- Immutable : 생성 후 그 상태가 변하지 않는 객체
- 변수명 앞에 a나 the 를 붙이는 경우
- 동일한 이름의 클래스가 존재하고, 클래스의 인스턴스를 만들고 싶을 때,e.g. Bird 의 인스턴스 aBird
- a 나 the 를 붙여서 분류가 아닌 객체임을 강조해준다.
- 물론 클래스명을 그대로 쓰는 것보단 좀더 유일무이한 객체임을 의미하는 변수명을 권장한다.
궁금한 점
- 상위클래스는 상속해줄 특성이 많을수록 좋다?
- LSP : 하위 타입은 상위 타입을 항상 대체할 수 있어야 한다
- 오버로딩을 지원하지 않는 언어 : C, JS, Dart 등
- 거기서는 오버로딩에 어떻게 대처하나?
- 메서드명에 타입을 명시함
- 파이썬은 인자 기본값을 활용해 오버로딩을 유사하게 구현
- 거기서는 오버로딩에 어떻게 대처하나?
정리한 것
- 클래스 class
- 클래스는 분류다
- 객체는 분류에 속하는 유일무이한 실체다
- 객체의 속성, 행위가 존재
- 클래스 : 객체 = 분류 : 실체
붕어빵보다는…. 펭귄 : 핑구
- 객체 지향 4대 특성
- 캡슐화 : 정보은
- 추상화 : 모델링
- 상속 : 재사용
- 다형성 : 사용 펀의
- 추상화 : 대상에게서 관찰자가 관심을 두는 특성만 추출하는 것
- 어플리케이션 경계 : 관찰자의 관심영역
- 자바에서는 class 를 통해 추상화를 지원
- 상속 : 재사용&확장 extends
- 계층도 보다는 분류도가 맞음
- 상위클래스의 특성을 하위클래스에 물려줌
- 재사용 : 리소스 효율적 사용
- 확장 : 하위 클래스에서 필요한 특성을 추가
- 하위 클래스는 상위 클래스다 : LSP
- is-a 가 아니라 is a kind of 관계이다.
- 클래스는 ‘분류’ 이기 때문에 ‘~이다’ 의 논리가 적용되는 것은 어색하다.
- 자바에서 다중상속과 인터페이스
- 다중상속 : 다중상속이 가능할 경우,
- 상속한 클래스에 동일한 이름의 상위메서드가 여러개 존재하면 어떤 것을 사용할 지 난감해짐
- 인터페이스 : 다중상속의 장점 활용 가능
- ~able : 구현은 (인터페이스)할 수 있다.
- e.g. Serializable, Cloneable, Comparable, Runnable …
- 상속은 특성을 상속해줌 / 인터페이스는 기능 구현을 강제함인터페이스는 구현할 메서드가 적을수록 좋음 : ISP
- → 상위클래스는 상속해줄 특성이 많을수록 좋음 : LSP
- 다형성 : 사용편의성
- 오버라이딩, 오버로딩, 제네릭 → 사용편의성 제공
- 캡슐화 : 정보 은닉
- 접근제어자를 통해 은닉
주요 내용
부가적인 내용
- 더이상 참조되지 않는 객체는 힙 영역에서 GC 에 의해 수거됨
- **GC가 언제 오는지는 신만이 아신다는 말이 있다
- 메모리 이름
- static 영역이 static 인 이유 - 프로그램 실행 후 메모리 static영역에 한번 올라가면 위치가 변할 일이 없는 영역이기 때문
- 스택 영역이 스택인 이유 - FILO 라서
- 힙 영역이 힙인 이유 - 대용량 자료를 저장할 수 있도록 메모리를 사용하는 방식
- 변수 초기화
- 지역(local)변수는 직접 초기화해주지 않으면 쓰레기값을 가짐
- 멤버변수(local 외)는 기본값으로 초기화해줌(초기화의 주체를 규정하기가 애매하므로)
- 상속의 동작
- 인스턴스 생성 시 상위 클래스 인스턴스도 힙영역에 함께 생성됨
- 상위 클래스 타입 변수에 하위 클래스 인스턴스를 할당할 경우, (형변환)변수는 해당 상위클래스 인스턴스의 힙영역 위치를 참조함
- 하위 및 상위 클래스 인스턴스 모두 생성되고
- 오버라이딩된 메서드는 상위 메서드까지 덮어씌움
- 정적 멤버는 일관된 사용과 물리적 접근 효율성을 위해 Class.staticVar 형식으로 접근하자
- 참조변수를 할당하는 경우에는 참조(주소)값 자체를 복사함 (Call By Value)
- 참조변수는 가진 값을 주소값으로 사용한다는 것만 다를 뿐
- 객체지향적으로 쓰인 코드는논리적으로 이해하기 쉬워야 한다
- 인간의 언어로 번역하면서 읽을 때
- getter & setter 는 한국말로 접근자 & 설정자
- 접근제어자 범위
- private / default / protected / public
- 클래스 / 패키지 / +상속 / all
- 변수명 앞에 a나 the 를 붙이는 경우
- 동일한 이름의 클래스가 존재하고, 클래스의 인스턴스를 만들고 싶을 때,e.g. Bird 의 인스턴스 aBird
- a 나 the 를 붙여서 분류가 아닌 객체임을 강조해준다.
- 물론 클래스명을 그대로 쓰는 것보단 좀더 유일무이한 객체임을 의미하는 변수명을 권장한다.
- 오버라이딩 / 오버로딩 이미지화
- 올라타면 위에서 하나로 보이고,
- 옆으로 나열해서 적재하면 모두 보임
알아보기
여기까지 자세히 알아보지는 못했는데, 일단 기록한다
- 논리적설계, 물리적 설계 92p
- 이뮤터블과 메모리 할당 97p
- 힙이 힙인 이유?
- 지역변수는 기본자료형도 초기화가 안돼??
- 다중상속의 다이아몬드 문제 117p
- 상위클래스는 상속해줄 특성이 많을수록 좋음 : LSP ? 119p
- 인텔리제이에서 클래스 다이어그램 보는 법.. 124p
- 명시적 형변환(Casting) / 암묵적 형변환(Promotion) 127p
- 오버로딩을 지원하지 않는 언어가 뭐가 있나? 거기서는 오버로딩에 어떻게 대처하나? 133p
스터디에서
- LSP : 계약을 지켜
- 형식적인 계약
- 맥락적인 계약
- → 잘못된 코드인 것 같고, 객체지향적이지도 않은 것 같다고 생각했다.
- 파이썬도 언어 차원에서는 오버로딩을 지원하지 않아서 인자의 기본값을 세팅하는 방향으로 오버로딩을 유사하게 만들어쓴다.
반응형
'Java' 카테고리의 다른 글
[🐸객체 개구리책] 4,5장 자바가 확장한 객체지향 & SOLID (0) | 2025.03.19 |
---|---|
[🐸객체 개구리책] 1,2장 자바 등장 배경 & 메모리 동작 방식 (1) | 2025.03.05 |