본문 바로가기

[객체지향] 다형성이란? 다형성 생물학적으로 다형성이란 같은 종의 생물이 유전적, 환경적인 요인으로 형태와 형질에 대해 다양성을 나타난다는 뜻 여기서 객체지향 특징 중 하나인 다형성이란 어떤 객체나 메서드가 상황에 따라 여러가지 속성과 기능의 형태를 가진다는 뜻이 된다. => 하나의 무언가가 여러가지 형태 다양성을 가진다 하나의 객체의 참조 변수 타입이 여러 타입의 객체를 참조 가능 abstract class Shape { protected BigDecimal width; protected BigDecimal height; } class Triangle extends Shape {...} class Square extends Shape {...} Shape shape1 = new Triangle(); Shape shape2 = ..
[객체지향] 객체 지향 프로그래밍이란? * 객체지향 프로그래밍 개발자가 구현하려는 시스템 혹은 모듈의 모든 개체(배달앱으로 생각하면 사용자, 배달기사, 음식점, 주문, 결제) 들을 추상화(모델링) 하여 상태와 행위를 가지는 명세(클래스)를 만들고 명세를 통해 실제 동작하는 객체를 만들어 이들간 상호 작용을 이용하는 프로그래밍 기법 클래스와 객체, 추상화 생각해보기 https://tgio.tistory.com/47 [객체지향] 클래스,객체에 대해 생각해보기(계속 추가) * 클래스 (Class) - 객체지향에서 실제 객체를 모델링(추상화)하여 공통적인 상태와 행위를 설계(명세)한 것 - 객체의 공통된 부분을 명세하여 같은 상태와 행위를 가진 객체 생성 할 때 사용 => 클 tgio.tistory.com * 객체지향 프로그래밍의 장단점? 장점 - ..
[OS] Process에 관하여 (추가) * Process란? 일반적으로 사용하는 프로그램 (Kakao talk, Excel)들을 디스크에서 메인 메모리로 적재(보통 실행 파일을 더블클릭하는 행위)하여 운영체제의 관리를 받는 상태 -> 실행 중인 프로그램 - 프로그램 -> 어떤 문제를 처리하기 위해 실행순서나 처리방법등 을 모아 놓은 명령어 모음 - 적재 -> 운영체제(로더)가 프로그램을 보조 기억장치(디스크)에서 주 기억장치(메모리)로 할당하는 행위 * Process 상태 생성 (New) - 프로세스가 생성되고 있는 상태, PCB를 생성 (주 메모리로 적재하고있는? 상태) 준비 (Ready) - 프로세스 생성을 마치고 실행에 필요한 모든 자원을 할당 받은상태(메모리 등? CPU 자원은 제외) CPU 자원을 받으면 실행 가능 실행 (Run) -..
[객체지향] 클래스,객체에 대해 생각해보기(계속 추가) * 클래스 (Class) - 객체지향에서 실제 객체를 모델링(추상화)하여 공통적인 상태와 행위를 설계(명세)한 것 - 객체의 공통된 부분을 명세하여 같은 상태와 행위를 가진 객체 생성 할 때 사용 => 클래스가 없다면? 객체를 생성/사용할때 마다 속성과 메서드를 넣어줘야한다. (익명클래스 느낌?) - 게임을 플레이 하는 유저 객체가 있을때, 유저의 기본적인 상태나 행위를 명세 class GameUser { private int hp = 100; private int mp = 100; public void attack() { System.out.println("attack"); } } * 객체 (Instance) - 실제 데이터를 추상화하여 상태와 행위를 가지는 프로그램 단위 - 클래스에서 정의한 상태나 ..
[JAVA] Effective Java - 7. 다 쓴 객체 참조를 해제하라 Java는 C, C++ 처럼 메모리를 직접 관리(malloc(), free(), new, delete) 하는 것이 아닌 Garbage Collector가 존재해 메모리를 자동으로 관리 해주므로 프로그래머가 직접 메모리의 할당과 해제를 할 필요가 줄어들었다. Garbage Collector 참조) https://tgio.tistory.com/36?category=776542 [JAVA] JVM 구조와 동작 2 (Runtime Data Area, Garbage Collector) Runtime Data Area JVM의 메모리 영역으로 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack 5개의 영역으로 나뉜다. Method Area..
[JAVA] Effective Java - 6. 불필요한 객체 생성을 피하라. 똑같은 기능의 객체를 매번 생성하기 보다는 재사용하는 것이 좋다. 예로 불변객체인 String 객체는 int i = 0; while(i < Integer.MAX_VALUE) { // String a = new String("a"); // 평균 0.05초 String a = "a"; // 평균 0.002초 i++; } new 생성자로 매번 생성시 쓸데없는 String 인스턴스가 수백만개 생겨난다. 하지만 String 리터럴 사용시 String Contants Pool에 저장되어 재사용되어지므로 생성 되지않는다. 속도 면에서도 차이가 나는걸 볼 수 있다. 또 다른 예로는 Boolean(String) 생성자(자바 9 이상 deprecated) 와 Boolean.valueOf(String)가 있다. 마찬가지로 ..
[JAVA] Effective Java - 5. 자원을 직접 명시하지 말고 의존 객체 주입 사용 보통 클래스는 하나 이상의 자원에 의존한다. 예시가 생각나지 않아 책에 나온 예시를 참조 하였다. 맞춤법 검사기는 사전에 의존하게 되는데, 이런 클래스들을 유틸리티 클래스 또는 싱글턴으로 구현한 모습을 드물지않게 볼 수 있다. // 정적 유틸리티 class SpellChecker { private final Lexicon dictionary = new KoreanLexicon(); private SpellChecker() {} public static boolean isValid(String word) { //.. } } // 싱글턴 class SpellChecker { private final Lexicon dictionary = new KoreanLexicon(); private SpellChecke..
[JAVA] Effective Java - 4. 인스턴스화를 막으려면 private 생성자를 사용 정적 멤버로만 이루어진 클래스 1. 유틸리티 성 클래스 ex) java.lang.Math, java.util.Arrays 2. 특정 인터페이스를 구현하는 객체를 생성해주는 클래스 ex) java.util.Collections 3. final 클래스와 관련된 메서드들을 모아놓을 때 여기선 final 클래스란 상속이 불가한 클래스 final class Service { } 이런 유틸리티 클래스는 대개 인스턴스화 하지않는다. 그렇다고 생성자를 명시하지않으면 컴파일러가 자동으로 public 기본 생성자를 만들어준다. -> 원하는 방향이 아님 그때, private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. class Service { private Service() { throw new Asserti..