Programming/Java
SOLID 5원칙 - 좋은 객체 지향 설계의 5가지 원칙 SOLID란 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것이다. 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다. SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링 하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. 이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다. - 위키 백과 SRP : 단일 책임 원칙 (Single Responsibility Principle) OC..
스트림 자바 8 전까지 많은 데이터를 다룰 때 컬렉션이나 배열에 데이터를 담고 for문, Iterator를 사용했다. 이러한 방법들은 코드의 가독성이 떨어지고 데이터 소스들을 각각 다른 방법으로 다뤄야 한다. 다양한 데이터 소스들을 스트림으로 만들기만 하면 표준화된 방법으로 작업을 할 수 있게 해주는 것이 스트림이다. 스트림의 특징 1. 스트림은 읽기 전용이다. (원본 데이터를 변경하지 않는다.) public class StreamTest { public static void main(String[] args) { List list = Arrays.asList(4, 1, 5, 3, 2); List sorted = list.stream().sorted().collect(Collectors.toList())..
람다식 람다식은 함수를 간단한 식(expression)으로 표현하고 람다식을 익명 함수(anonymous function)이라고도 한다. int max(int a, int b){ return a > b ? a : b; } 일반적으로 정의해서 사용하는 함수는 위와 같다. 함수를 람다식으로 간단하게 표현할 수 있고 그 덕분에 가독성이 높아지고 생산성이 높아진다. (a, b) -> a > b ? a : b 람다식으로 표현하기 앞에서 본 max 함수를 람다식으로 표현하는 방법을 알아보자 1. 메서드 이름과 반환 타입을 제거하고 '->'를 {} 앞에 추가한다. (int a, int b) -> { return a > b ? a : b; } 2. return 값이 있는 경우 return을 생략하여 식으로 표현할 수 ..
제네릭(Generic) 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시 타입을 체크해주는 기능이다. 객체의 타입을 컴파일 시에 체크해주기 때문에 형변환의 번거로운 작업이 줄고 안정성이 증가한다. public class GenericTest { public static void main(String[] args) { ArrayList arr = new ArrayList(); for(int i =1 ; i 제한 없음
프로그램 오류 프로그램 오류는 크게 2가지로 나뉜다. 1. 컴파일 에러: 컴파일할 때 발생하는 에러 public class ExceptionTest { public static void main(String[] args) { system.out.println("Compile error"); } } 대체로 문법상의 오류로 컴파일 자체가 되지 않는다. 이 경우는 보통 IDE에서 알려주기 때문에 상대적으로 발견하기 쉽고 어렵지 않게 해결할 수 있다. 2. 런타임 에러: 실행할 때 발생하는 에러 public class ExceptionTest { public static void main(String[] args) { System.out.println(args[0]); } } 컴파일 에러와 다르게 IDE에선 확..
추상화(Abstract) 추상: 사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것, 프로그래밍에서 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것이다. [JAVA] 클래스와 객체 에서 클래스를 설계도에 비유했다. 추상 클래스는 미완성 설계도로 비유할 수 있다. 클래스의 멤버와 무관하게 추상 클래스는 추상 메서드를 가지고 있기 때문에 추상 클래스라고 불린다. 추상 메서드란 선언부에 abstract 제어자를 붙이고 메서드의 선언부만 존재하고 바디는 존재하지 않는 메서드를 말한다. //추상 클래스 abstract class Abstract{ String a; abstract void print(); String getA() { return a; } } 추상 클래스는..
다형성(Polymorphism) 다형성이란 상속 관계에 있는 객체들 중 상위 클래스의 참조변수가 하위 클래스의 인스턴스를 참조할 수 있는 성질이다. class Parent { void print(){ System.out.println("Parent"); } } class Child extends Parent { void print() { System.out.println("Child"); } void childDoStudy() { System.out.println("Child do study"); } } public class PolymorphismTest { public static void main(String[] args) { Parent p1 = new Parent(); Child c1 = new..
캡슐화(Encapsulation) 특정 객체 안에 관련된 속성과 기능을 하나의 캡슐(capsule)로 만들어 데이터를 보호하는 것 캡슐화는 데이터를 보호하는 목적으로 만들어졌다. 즉, 캡슐화는 정보 은닉이라고 정리할 수 있다. 자바는 캡슐화의 수단으로 접근제어자로 데이터를 보호, 은닉하고 getter와 setter 메서드를 사용해서 data에 접근한다. 1. 접근제어자 접근제어자는 멤버나 클래스에 사용하고 외부에서 접근하지 못하도록 제한한다. 접근제어자는 클래스, 멤버변수, 메서드, 생성자에 사용된다. private : 같은 클래스 내에서만 접근 가능 default : 같은 패키지 내에서 접근 가능 protected : 같은 패키지, 다른 패키지의 하위 클래스에서 접근 가능 public : 모든 곳에서 ..
상속(Inheritance) 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것. 상속을 활용하여 프로그래밍하면 코드의 중복을 줄이고 재사용성을 높여 유지보수에 기여한다. 상속받는 방법 class Parent{} class Child extends Parent{} 상속받는 방법은 간단하다. 상속받을 클래스의 이름 뒤에 extends 키워드와 상위 클래스의 이름을 적어주면 된다. 상위 클래스 : Parent 하위 클래스 : Child class Parent { int x = 1; int y = 2; static void print(){ System.out.println("hello"); } } class Child extends Parent { void printChild() { System.out.p..