나쁜 코드 - 깨진 유리창 법칙 💡실용주의 프로그래머 데이브 토마스 & 앤디 헌트의 '깨진 창문' 창문이 깨진 건물은 누구도 상관하지 않는다는 인상을 풍겨 사람들이 관심을 끊고 창문이 더 깨져도 상관하지 않는다. 따라서 창문이 깨지고 나면 쇠퇴하는 과정이 시작되는데, 나쁜 코드도 깨진 유리창처럼 나쁜 코드는 오히려 더나쁜 코드를 만든다는 비유이다. - 생산성 저하 나쁜 코드는 팀 생산성을 저하시켜 기술부채를 만들어 수정을 더 어렵게 한다. 코드를 고칠 때마다 엉뚱한 곳에서 문제가 생기고 간단한 변경이 불가능하니, 얽히고설킨 코드를 더한다. 코드가 더해질수록 진행 속도는 더뎌지고 복구도 어려워진다. - 새로운 시스템 기존 시스템을 모두 유지보수하며 이를 대체할 새로운 시스템 개발은 현실적으로 매우 어렵다...
인터페이스 - 다중 상속을 지원 - 추상 메소드와 상수만으로 이루어짐(메서드의 선언만 포함, 구현은 인터페이스를 구현하는 클래스에서 이루어짐) interface Flyable { void fly(); } class Bird implements Flyable { public void fly() { System.out.println("Bird is flying"); } } public class Test { public static void main(String[] args) { Bird myBird = new Bird(); myBird.fly(); // "Bird is flying" 출력 } } 상속과 인터페이스 동시 사용 - 동시 사용으로 다중 상속과 같은 효과 class Animal { void eat..
추상 메소드(Abstract Method) - 자식클래스에서 반드시 오버라이딩해야 하는 메소드 - 선언만 하고 구현은 없음 추상 클래스(Abstract Class) - 하나 이상의 추상 메소드를 포함하는 클래스 - 반드시 구현해야 하는 부분에 대해 명시적으로 표현 - 추상 클래스 자체는 객체 생성 불가(완전히 구현되지 않은 불완전한 클래스이기 때문) 1. 불완전한 구현: 추상 클래스는 불완전할 수 있다. 즉, 모든 메서드가 구현되어 있지 않을 수 있다. 인스턴스를 생성하려면 모든 메서드에 대한 구현이 필요하다. 그렇지 않으면 프로그램이 올바르게 작동하지 않을 수 있다. 2. 설계 의도: 추상 클래스는 상속을 통해 사용되도록 설계되었다. 개발자는 추상 클래스를 정의함으로써 특정 메서드를 반드시 구현하도록 ..
다형성(Polymorphism) - 한 객체가 여러가지 타입을 가질 수 있는 것(객체 지향 프로그래밍에서 한 클래스가 여러 타입으로 인식될 수 있는 능력) - 부모 클래스 타입의 참조 변수로 자식클래스 인스턴스 참조 참조변수와 다형성 - 서로 상속관계에 있는 클래스 사이에서만 형변환이 가능 - 메서드 매개변수가 같은 부모 클래스라면 부모 클래스 타입을 매개변수 타입으로 선언 가능 - 배열 혹은 자료구조에 부모 클래스로 데이터 타입을 지정하면 여러 자식 클래스를 저장 가능 - instanceof 연산자로 참조변수가 참조하는 인스턴스의 실제 타입을 확인하는데 사용 가능 instanceof - 실제 참조하고 있는 인스턴스의 타입 확인 - 특정 객체가 특정 클래스의 인스턴스인지 확인하는 데 사용 class An..
상속(Inheritance) - 클래스 간에 코드를 재사용하고 계층적 구조를 만들기 위한 중요한 객체 지향 프로그래밍의 특징 중 하나 - 기존 클래스에 기능 추가 및 재정의하여 새로운 클래스를 정의 - 새로운 클래스 뒤에 extends와 확장할 클래스를 적어서 표현 ex) class laptop extends computer 부모 클래스: 상속 대상이 되는 기존 클래스 = 상위 클래스, 기초 클래스 자식 클래스: 기존 클래스를 상속하는 클래스 = 하위 클래스, 파생 클래스 - 부모 클래스의 필드와 메소드가 상속됨(생성자, 초기화 블록은 상속되지 않음) - 같은 내용의 코드를 한 곳에서 관리함으로써 코드의 중복이 줄어듦 - 다중 상속은 불가능 - private, default 멤버는 자식 클래스에서 접근 ..
객체지향 프로그래밍(OOP) - 문제 혹은 로직을 객체 단위로 나눠서 작성하는 방법 (절차지향 프로그래밍과 반대 개념이 아니라 접근 방식의 차이가 있음) - 객체들이 서로 유기적으로 상호작용하는 프로그래밍 이론 JAVA, C#... ex) 자동차(객체) = 데이터(바퀴, 핸들, 차체 등) + 기능(길찾기, 주행보조 등) 특징 - 캡슐화 데이터의 구조와 기능을 하나의 캡슐형태로 만들어 외부에서는 형태를 알 수 없도록 하는 방법 - 추상화 객체의 공통적인 필드와 기능을 하나의 형태로 정의하는 설계 방법 - 상속 하위 클래스에서는 상속 받은 상위 클래스의 기능을 사용할 수 있고, 하위 클래스 자체에 새로운 기능을 추가할 수 있는 것 - 다형성 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 형태로 재구성되..
연산자 - 프로그래밍에서 계산을 하기 위해 수행되는 기호(연산의 대상이 되는 피연산자와 연산자의 조합) - 수행되는 항에 따라서, 연산 기능에 따라서 종류가 나뉨 단항/이항/삼항 산술/논리/비트/관계(비교)/기타 항과 연산자 - 단항 연산자: 항이 1개 ex) num++ - 이항 연산자: 항이 2개 ex) 1 + 1 - 삼항 연산자: 항이 3개 ex) (3 > 1) ? : 1 : 0 삼항 연산자는 간단한 if-else 문을 더 간결하게 표현하는 방법이다. public class TernaryOperatorExample { public static void main(String[] args) { int age = 20; // 삼항 연산자를 사용하여 나이에 따라 메시지 결정 String message = (..
변수 개념 - 변수: 데이터를 저장하는 메모리 공간에 붙여준 이름 선언(Declaration): 변수를 컴파일러에게 알려주는 것 초기화(Initialization): 변수를 사용하기 위해 공간에 특정 값으로 할당해주는 것 public class SimpleClass { // 변수 선언 및 초기화 int number = 10; // 정수형 변수 double decimalNumber = 5.5; // 실수형 변수 char character = 'A'; // 문자형 변수 boolean flag = true; // 불리언형 변수 String text = "Hello"; // 문자열형 변수 // 메인 메서드 public static void main(String[] args) { // 클래스의 인스턴스 생성 Si..
백엔드(Back-End) 개발자(Engineer)란? 🤓 웹 애플리케이션 서버 측의 설계, 구조, 유지보수를 담당하는 사람 즉, 백엔드는 웹 애플리케이션에서 서버 혹은 데이터베이스를 관리하는 기술이다. JAVA란? - 1996년에 sun 사에서 발표한 객체지향의 특징을 잘 반영한 언어 JAVA 특징 - 플랫폼 독립적: 운영체제에 따라 코드를 재작성 하지 않아도 된다. 한번만 작성해도 여러 운영체제에서 동작하기 때문이다. "Programmers Write Once, Run anywhere" (WORA) JVM이라는 Java 가상 머신 위에서 동작하기 때문에 가능하다. - 객체 지향적: 객체 지향의 반대 언어가 절차 지향적 언어인데, 이에 비해 생산성과 보안성이 높다. 객체 지향 언어는 구역별로 동작을 나눌..