WIL (23.01.23~01.28)
[2주차] 언어 기초 + 프로그래밍 기초
월~목요일은 Java 언어 기초 공부를, 금~토는 알고리즘 문제를 푸는 프로그래밍 기초 공부를 했다.
- Java 언어 기초
- 객체지향
- SOLID
- 제네릭스(Generics), 열거형(Enum), 애너테이션(Annotation)
- 람다(Lambda)와 스트림(Stream)
- 컬렉션 프레임워크(Collection Framework)
- 프로그래밍 기초
- 항해에서 제공해주는 프로그래머스 1단계 문제 개인 10개씩, 페어프로그래밍 3개씩
- 우리 반에서 자체적으로 진행하는 코드리뷰 프로그래머스 0단계 문제 5개씩
객체지향 프로그래밍
자바는 대표적인 객체지향 프로그래밍 언어이다.
이번주는 객체지향 프로그래밍이 무엇이며, 어떻게 구현해나갈 수 있을지 공부하고 실습하는 시간을 가졌다.
객체지향이란?
프로그래밍에서 필요한 데이터를 속성(변수)과 행위(메r섣드 를가진 “객체”로 만들고, 객체들이 상호작용을 통해 필요한 기능을 수행하도록 하는 프로그래밍 방법
객체지향의 특성
우선, 객체지향의 대표적인 특성으로는 캡슐화, 상속, 추상화, 다형성을 꼽을 수 있다.
- 캡슐화 : 객체 내부의 세부적인 사항을 감추는 것
- 객체 내부의 직접적인 접근을 제한 → 객체와 객체 사이 결합도↓ → 유연한 객체 설계
- 접근제어자로 캡슐화를 구현할 수 있다.
- 상속 : 상위 클래스의 특징을 하위 클래스가 물려받는 것
- 코드 중복 제거 & 코드 재사용성↑
- 데이터와 메서드 변경 시 상위에 있는 클래스만 수정하여 전체적으로 일관성 유지 가능
- 추상화 : 객체에서 공통된 부분을 모아 상위 개념으로 새롭게 선언
- 공통적이고 중요한 것을 모아 모델링
- 내부 구현 신경쓰지 않고 외부에 노출된 인터페이스만 사용하여 코드 작성 가능
- (추상화 - 추상 클래스 - 인터페이스) 순서로 모델링 → 다형성 확장
- 다형성 : 하나의 객체나 메서드가 여러가지 다른 형태를 가질 수 있는 것
객체지향의 장점
- 코드 재사용성 Good
- 유지보수 Good
- 객체지향이 아닌 경우, 코드를 수정할 때 일일이 찾아야 한다.
- 객체지향인 경우, 수정할 부분이 클래스 내부(변수 or 메서드)에 있기 때문에 해당 부분만 수정하면 된다.
- 추상화와 상속 특성이 잘 드러나게 설계한다면, 공통 기능이 추가/변경될 때 인터페이스, 추상 클래스, 상속한 부모 클래스 등 상위 클래스만 수정하면 되므로 유지보수가 더 쉬워진다.
- 대형 프로젝트 적합
- 클래스 단위로 모듈화하여 개발이 가능하므로, 여러명이 나누어 개발하기 쉽다.
객체지향 설계의 5원칙(SOLID)
- SRP(Single Resposibility Principle) : 단일 책임 원칙
- 하나의 클래스는 하나의 책임만 갖는다. 클래스를 변경해야 하는 이유는 하나뿐이어야 한다.
- OCP(Open-Closed Principle) : 개방-폐쇄 원칙
- 소프트웨어 엔티티(클래스, 모듈, 함수 등)은 확장에는 열려 있고, 주변의 변화에는 닫혀 있어야 한다.
- LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
- 상위 타입의 객체를 하위 타입 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상 작동해야 한다.
- ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
- 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
- DIP(Dependency Inversion Principle) : 의존성 역전 원칙
- 고차원 모듈은 저차원 모듈에 의존하면 안 된다. 두 모듈 모두 다른 추상화된 것에 의존해야 한다.
JVM
JVM(Java Virtual Machine)이란
- Java 프로그램이 실행되는 가상 컴퓨터
- 자바 코드 컴파일(javac) → .class 바이트 코드 생성 → 자바 가상 머신(JVM) 환경에서 실행
JVM의 장점
- 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작 가능
- 각 플랫폼에 설치되어 있는 JVM에서 바이트 코드를 운영체제(윈도우, 리눅스 등)에 맞는 실행 파일로 바꿔준다.
이번주 TIL 모음
Java 언어 기초
Java 객체지향 설계를 해보자 - 계산기 공장 만들기
[JAVA 개념정리] SOLID - 객체지향 설계의 5원칙
[JAVA 개념정리] 컬렉션 프레임워크(Collection Framework)
프로그래밍 기초
[프로그래머스 lv.1] 12930.이상한 문자 만들기
[프로그래머스 lv.1] 12935. 제일 작은 수 제거하기
[Java] Integer, Character 클래스 메서드