728x90 반응형 생활코딩10 생활코딩 - JAVA (제네릭) 제네릭이란? 제네릭의 사용법 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다 제네릭은 마치 메솓의 매개변수와 상당히 비슷하게 동작한다고 할 수 있다. 변수에 들어갈 값과 관련돼 있는데 제네릭은 그 변수의 데이터 타입과 관련되 있다고 생각하면 된다. 인스턴스화될 때 꺾쇠 안에 String이라는 구체적인 데이터 타입을 지정하면 그것이 앞서 말한 T에 지정된다. T는 String이 되고, info는 String 데이터 타입을 갖게 된다. 이것이 제네릭이다. 이렇게 만들어진 인스턴스를 담을 수 있는 이 p1의 데이터 타입도 person이라는 데이터 타입과 똑같이 지정돼야 한다. 데이터 타입으로 인스턴스를 생성하기 때문에 이 인스턴스를 담을 변수도 이와 동일한 데이.. 2021. 1. 15. 생활코딩 - JAVA (상수와 enum) enum은 자바 5.0부터 제공되기 시작했다. 상수 : 변하지 않는 값 x : 변수 [enum의 도입 배경] 2021. 1. 10. 생활코딩 - JAVA (Object 클래스) 객체(object)라는 object라는 이름을 가진 클래스를 의미한다. 이 클래스는 특별한 형태의 클래스인데, 이 클래스를 한마디로 정의하자면 시조이다. 모든 클래스의 공통된 조상으로서 Object라는 구체적인 클래스가 있다. 1 2 3 package org.opentutorials.javatutorials.progenitor; class O {} 위의 코드는 아래와 코드가 같다. 1 2 3 package org.opentutorials.javatutorials.progenitor; class O extends Object {} 어떤 클래스를 정의했을 때 그 클래스가 다른 클래스를 상속하지 않는다면 자바가 암시적으로 "extend Object"를 추가한다는 뜻이다. 이렇게 하는 이유는 자바는 수많은 클래.. 2020. 12. 31. 생활코딩 - JAVA (예외 던지기) [예외던지기] 문제를 다른 사람에게 던질 수도 있고 자기 자신이 처리할 수도 있다. *[F1]키를 누르고 [javadoc for 'java.io.FileReader.FileReader(String)'] 같은 생성자에 관한 도움말을 누르면 FileReader의 생성자에 대한 자바 API를 확인할 수 있다. 해당 도움말에서 중요한 것은 Throws 부분이다. Throws는 FileReader 생성자를 사용하는 쪽에서 반드시 FileNOtFoundException에 대한 예외 처리를 강제한다는 의미이다. [예외 사슬] 1 2 3 4 try { new FileReader("out.txt"); }catch(){ } FileReader라는 API의 사용자에게 던진 예외를 처리하기 위해 catch를 한 것이다. AP.. 2020. 12. 30. 생활코딩 - JAVA (예외 (exception)) [예외란 무엇인가] 예외란 프로그램을 제작하는 과정에서 발생하는 오류를 제어 또는 처리하는 것이다. 예외를 이해하려면 기본적으로 알고 있어야 할 것들이 많이 있다. 애플리케이션을 잘 만들고 잘 동작하게 하며, 애플리케이션을 규모 가변성 있게 구축하는 것은 예외와 상관이 없거나 적다는 것이다. 예외, 보안과 같은 주제는 실패하지 않는 법이라고 할 수 있다. 일반적으로 오류 또는 에러라는 많이 쓰는데, 자바를 비롯한 여러 프로그래밍 언어에서는 예외라는 표현을 쓴다. 오류는 예외의 일종이라고 생각하면 된다. 일반적이지 않은 상황에서 우리가 기획했던 바와 다르게 발생하는 문제를 포괄적으로 예외(exception)라고 한다. 또한 이 같은 예외 상황에서 해당 프로그램을 만든 프로그래머가 예외 상황을 처리하고 관리.. 2020. 12. 29. 생활코딩 - JAVA (다형성) [다형성] 다형성은 한 메소드나 클래스가 다양한 방식으로 동작하는 것을 의미한다. ex) a()라는 메소드가 있을 때 이 메소드가 사왕에 따라 다르게 동작한다는 것을 의미한다. 또한 A라는 클래스가 있을 때 마찬가지로 어떤 경우에는 똑같은 크래스지만 그 클래스의 메소드를 실행했을 때 상황에 따라 다양하게 동작하는 것이 바로 다형성이다. 다형성은 객체나 인터페이스, 추상화처럼 뭔가 철학적인 느낌을 자야낸다. 다형성의 가장 쉬운 예로 오버로딩을 들 수 있다. 오버로딩은 이름이 같지만 매개변수 형식에 따라 다른 베소드가 호출되는 기법이기 때문이다. 즉, 이름은 같지만 다르게 동작한다고 할 수 있기 때문에 다형성이라는 측면에서 생각해 볼 수 있다. [클래스와 다형성1] 다형성을 통해 메소드나 클래스를 바라보는 .. 2020. 12. 29. 생활코딩 - JAVA (인터페이스) [문법과 개념] 인터페이스를 abstract, final과 함께 대표적인 규제이다. 인터페이스의 역할을 한마디로 정리하자면 어떤 클래스에서 특정한 인터페이스를 사용한다면 그 클래스가 반드시 해당 인터페이스에 포함된 메소드를 구현하도록 강제하는 것이다. 인터페이스에서 강제하는 메소드를 구현하지 않으면 프로그램은 컴파일조차 되지 않는다. 특정 클래스를 특정 인터페이스와 결합하면 그 클래스를 정의할 때 인터페이스에 정의된 메소드를 반드시 구현하도록 강제할 수 있다. 그리고 이렇게 구현되 잇을 때 A 클래스는 이터페이스를 구현한다라고 이야기 한다. [인터페이스를 사용하는 이유] 인터페이스는 어떤 클래스가 어떤 멤버(메소드)를 가지고 잇는가에 대한 명세서와 같은 역할을 한다. 구현하는 클래스는 해당 명세서에 정의.. 2020. 12. 19. 생활코딩 - JAVA (final) Abstract가 상속을 가제하는 일종의 규제라고 한다면 final은 abstract와는 정반대되는 의미를 가지고 있다. 상속이나 변경을 금지하는 규제이기 때문이다. [PI 멤버에 final을 지정] pakage org.opentutorials.javatutorials.finals; Class calculator{ static final double PI = 3.14; int left, right; public void setOperands(int left, int right){ this.left = left; this.right = right; //Calculator.PI = 6; } public void sum(){ System.out.println(this.left + this.right); } p.. 2020. 12. 19. 생활코딩 - JAVA (Abstract) Abstract는 한국어로는 ‘추상’으로 번역할 수 있다. 객체지향 프로그래밍에서 주목해야 할 특징으로 abstract 키어드ㅡ로 지정된 메소드나 클래스는 직접적으로 사용할 수 없고 반드시 그것을 상속한 클래스를 만들고, 그렇게 상속한 클래스를 사용해야 한다는 것이다. 다시 말해 abstract는 클래스를 상속해서 사용하돍 강제하는 것이다. package org.opentutorials.javatutorials.abstractclass.example1; Abstract class A{ public abstract int b(); // 본체가 잇는 메소드는 abstract 키워드를 가질 수 없다. // public abstract int c(){System.out.println(“hello”); } // .. 2020. 12. 19. 생활코딩 - JAVA (접근 제어자) 접근 제어자는 객체에 속한 멤버(메소드나 변수)를 사용하는 입장에서 누가 이것을 사용할 수 있는가에 대한 권한을 부여하는 역할을 한다. 변화를 수용하는 과정에서 자유로움만으로는 각종 문제가 생길 수 있다. 그러한 문제를 완화하기 위해서는 다양한 규제가 필요하다. 규제라는 측면에 맞춰진 기능 - 데이터 타입 데이터 타입은 어던 변수가 잇을 대 그 변수의 형식을 지정함으로써 해당 변수에는 반드시 문자열이 들어가거나 반드시 정수가 들어간다는 사실을 그 변수를 사용하는 사용자에게 보장해준다. 추상클래스, final, 접근 제어자, 인터페이스 등은 규제에 해당하는 것이다. [문법] package org.opentutorials.javatutorials.acesmodifier; class A { public Str.. 2020. 12. 19. 이전 1 다음 728x90 반응형